链表的插入与删除M

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define OK 1
 4 #define error -1
 5 typedef struct LNode
 6 {
 7    int data;
 8    struct LNode *next;
 9 }LNode,*LinkList;
10 LinkList CreateList(int n)
11 {
12      LinkList L,p,s;
13      int i;    
14      L=(LinkList)malloc(sizeof(LNode));
15      L->next=NULL;L->data=n;
16      s=L;
17      printf("请输入链表元素:\n");
18      for(i=0;i<n;i++)
19      {
20        p=(LinkList)malloc(sizeof(LNode));
21        scanf("%d",&p->data);
22        s->next=p;
23        s=s->next;
24        p->next=NULL;//正序输入 
25      }
26      return L;
27 }
28 int GetElem(LinkList L,int i,int &e)
29 {
30     LinkList p;
31     int j;
32     p=L->next;j=1;
33     while(p&&j<i)
34     { p=p->next;++j;}
35     if(!p||j>i) return error;
36     e=p->data;
37     return OK;
38 }
39 int ListInsert(LinkList &L,int i,int e)
40 {
41     LinkList p,s;
42     int j=0;
43     p=L;
44     if(i<1&&i>L->data) return error;
45     while(--i) p=p->next;
46     s=(LinkList)malloc(sizeof(LNode));
47     s->data=e;s->next=p->next;
48     p->next=s;
49     return OK;
50 }
51 int ListDelete(LinkList &L,int i,int &e)
52 {
53    LinkList p,q;
54    p=L;
55    if(i<1&&i>L->data) return error;
56    while(--i) p=p->next;
57    q=p->next; p->next=q->next;
58    e=q->data;  free(q);
59    return OK;
60 }
61 int printlist(LinkList La)
62 {
63        LinkList p=La;
64        printf("\n链表元素为:");
65        printf("\n********************\n\n");
66         while(p->next)
67         {
68                   p=p->next;
69                   printf("%d ",p->data);
70        }
71        printf("\n********************\n");
72        return OK;
73 }
74 int main()
75 {
76      LinkList head;//存放链表首地址
77      int i,m,n;
78      printf("请输入链表的长度:\n");
79      scanf("%d",&n);
80      head=CreateList(n);
81      printlist(head);
82      printf("请输入你要查找元素的位置:\n");
83      scanf("%d",&i);
84      GetElem(head,i,m);
85      printf("你所查找的第%d个元素为:%d\n",i,m);
86      printf("请输入你要插入的元素的位置和数值:\n");
87      scanf("%d%d",&i,&m);
88      ListInsert(head,i,m);
89      printlist(head);
90      printf("请输入你要删除元素的位置:\n");
91      scanf("%d",&i);
92     ListDelete(head,i,m);
93      printf("你所删除的元素为:%d\n",m);
94      printlist(head);
95      system("pause");
96      return OK;
97 }

posted on 2012-08-03 08:07  mycapple  阅读(371)  评论(0编辑  收藏  举报

导航