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 }