链表的插入与删除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 }

你可能感兴趣的:(链表)