zoukankan      html  css  js  c++  java
  • 新建一个链表

    C语言:转自:http://www.cnblogs.com/newwy/archive/2010/10/10/1847456.html

      1 ////////////////////////////////////////////
      2 //单链表的初始化,建立,插入,查找,删除。//
      3 //Author:Wang Yong                        //    
      4 //Date: 2010.8.19                         //
      5 //////////////////////////////////////////// 
      6  
      7  
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10  
     11 typedef int ElemType;
     12 //////////////////////////////////////////// 
     13  
     14 //定义结点类型 
     15 typedef struct Node
     16 {
     17     ElemType data;              //单链表中的数据域 
     18     struct Node *next;          //单链表的指针域 
     19 }Node,*LinkedList;
     20  
     21 //////////////////////////////////////////// 
     22  
     23 //单链表的初始化
     24  
     25 LinkedList LinkedListInit()
     26 {
     27     Node *L;
     28     L = (Node *)malloc(sizeof(Node));   //申请结点空间 
     29     if(L == NULL)                       //判断是否有足够的内存空间 
     30         printf("申请内存空间失败
    ");
     31     L->next = NULL;                  //将next设置为NULL,初始长度为0的单链表 
     32 }
     33  
     34 //////////////////////////////////////////// 
     35  
     36 //单链表的建立1,头插法建立单链表
     37  
     38 LinkedList LinkedListCreatH()
     39 {
     40     Node *L;
     41     L = (Node *)malloc(sizeof(Node));   //申请头结点空间
     42     L->next = NULL;                      //初始化一个空链表
     43      
     44     ElemType x;                         //x为链表数据域中的数据
     45     while(scanf("%d",&x) != EOF)
     46     {
     47         Node *p;
     48         p = (Node *)malloc(sizeof(Node));   //申请新的结点 
     49         p->data = x;                     //结点数据域赋值 
     50         p->next = L->next;                    //将结点插入到表头L-->|2|-->|1|-->NULL 
     51         L->next = p; 
     52     }
     53     return L; 
     54 } 
     55  
     56 //////////////////////////////////////////// 
     57  
     58 //单链表的建立2,尾插法建立单链表
     59  
     60 LinkedList LinkedListCreatT()
     61 {
     62     Node *L;
     63     L = (Node *)malloc(sizeof(Node));   //申请头结点空间
     64     L->next = NULL;                  //初始化一个空链表
     65     Node *r;
     66     r = L;                          //r始终指向终端结点,开始时指向头结点 
     67     ElemType x;                         //x为链表数据域中的数据
     68     while(scanf("%d",&x) != EOF)
     69     {
     70         Node *p;
     71         p = (Node *)malloc(sizeof(Node));   //申请新的结点 
     72         p->data = x;                     //结点数据域赋值 
     73         r->next = p;                 //将结点插入到表头L-->|1|-->|2|-->NULL 
     74         r = p; 
     75     }
     76     r->next = NULL; 
     77      
     78     return L;   
     79 }
     80  
     81 //////////////////////////////////////////// 
     82  
     83 //单链表的插入,在链表的第i个位置插入x的元素
     84  
     85 LinkedList LinkedListInsert(LinkedList L,int i,ElemType x)
     86 {
     87     Node *pre;                      //pre为前驱结点 
     88     pre = L;
     89     int tempi = 0;
     90     for (tempi = 1; tempi < i; tempi++)
     91         pre = pre->next;                 //查找第i个位置的前驱结点 
     92     Node *p;                                //插入的结点为p
     93     p = (Node *)malloc(sizeof(Node));
     94     p->data = x; 
     95     p->next = pre->next;
     96     pre->next = p;
     97      
     98     return L;                           
     99 } 
    100  
    101 //////////////////////////////////////////// 
    102  
    103 //单链表的删除,在链表中删除值为x的元素
    104  
    105 LinkedList LinkedListDelete(LinkedList L,ElemType x)
    106 {
    107     Node *p,*pre;                   //pre为前驱结点,p为查找的结点。 
    108     p = L->next;
    109     while(p->data != x)              //查找值为x的元素 
    110     {   
    111         pre = p; 
    112         p = p->next;
    113     }
    114     pre->next = p->next;          //删除操作,将其前驱next指向其后继。 
    115     free(p);
    116     return L;
    117 } 
    118  
    119 /////////////////////////////////////////////
    120  
    121 int main()
    122 {
    123     LinkedList list,start;
    124 /*  printf("请输入单链表的数据:"); 
    125     list = LinkedListCreatH();
    126     for(start = list->next; start != NULL; start = start->next)
    127         printf("%d ",start->data);
    128     printf("
    ");
    129 */  printf("请输入单链表的数据:"); 
    130     list = LinkedListCreatT();
    131     for(start = list->next; start != NULL; start = start->next)
    132         printf("%d ",start->data);
    133     printf("
    ");
    134  
    135     int i;
    136     ElemType x;
    137     printf("请输入插入数据的位置:");
    138     scanf("%d",&i);
    139     printf("请输入插入数据的值:");
    140     scanf("%d",&x);
    141     LinkedListInsert(list,i,x);
    142     for(start = list->next; start != NULL; start = start->next)
    143         printf("%d ",start->data);
    144     printf("
    ");
    145     printf("请输入要删除的元素的值:");
    146     scanf("%d",&x);
    147     LinkedListDelete(list,x); 
    148     for(start = list->next; start != NULL; start = start->next)
    149         printf("%d ",start->data);
    150     printf("
    ");
    151      
    152     return 0;
    153 } 

    另外可以参看:http://www.nowamagic.net/librarys/veda/detail/1803

    Java版参看:http://blog.csdn.net/qiucaijuan/article/details/6721281

  • 相关阅读:
    线性代数之行列式的C#研究实现
    政府部门域名系统杂谈
    C#实现在foreach中删除集合中的元素
    RestServer 2.0 正式版发布
    常见的几种开源协议
    PostgreSQL学习手册(常用数据类型)
    一个很简单的淘宝优惠券搜索助手 大家看看有没有用吧
    做了一个淘宝内部优惠券分享平台支持微信公众号以及网站
    二十三种设计模式之原型模式的C#实现
    arcgis,mapinfo(mapxtreme),openlayers专业GIS系统开发
  • 原文地址:https://www.cnblogs.com/crane-practice/p/3639264.html
Copyright © 2011-2022 走看看