单链表基本操作(转)

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

 

posted @ 2014-04-26 00:43  mynona  阅读(252)  评论(0编辑  收藏  举报