1 #include"stdio.h"
2 #include"stdlib.h"
3 typedef int DataType;
4 typedef struct node
5 {
6 DataType data;
7 struct node *next;
8 }LinkNode,*LinkList;
9 int count;
10 LinkList L;
11 LinkList initList(LinkList &L)
12 {
13 L = (LinkNode*)malloc(sizeof(LinkNode));
14 L->next = NULL;
15 return L;
16 }
17 void creatList(LinkList &L , int flag)
18 {
19 int number;
20 printf("请输入第%d个元素:",count+1);
21 scanf("%d",&number);
22
23 if(number == flag)
24 {
25 L = NULL;
26 }
27 else
28 {
29 L = (LinkNode*)malloc(sizeof(LinkNode));
30 L->data = number ;
31 count++;
32 creatList(L->next , flag);
33 }
34 }
35 LinkNode *locate(LinkList &L , int i)
36 {
37 int count = 0;
38 LinkNode *p = L;
39 while(p != NULL && count < i-1)
40 {
41 count++;
42 p = p->next;
43 }
44 if(p == NULL)
45 {
46 printf("该链表中没有该元素");
47 return p;
48 }
49 else
50 {
51 return p;
52 }
53
54 }
55 //目前该函数还有bug 还需要改进
56 void instNode(LinkList &L , int i , int x)
57 {
58 if(i<1||i>count)
59 {
60 printf("输入错误 不能插入!");
61 return ;
62 }
63 LinkNode *newNode = (LinkNode*)malloc(sizeof(LinkNode));
64 if(i == 1)
65 {
66 LinkNode *p = locate(L->next , i);
67 newNode->data = x;
68 newNode->next = p;
69 L->next = newNode;
70 }
71 else
72 {
73 LinkNode *p = locate(L->next , i-1);//p指向第i-1个节点
74 LinkNode *q = p->next;//q指向的p的下一个节点 就是第i个节点
75 newNode->data = x;
76 p->next = newNode;
77 newNode->next = q;
78 count++;
79 printf("插入成功!\n");
80 }
81 }
82 void show(LinkList &L)
83 {
84 int count = 0;
85 LinkNode *p = L;
86 while(p != NULL)
87 {
88 count++;
89 printf("第%d个元素为:%d\n",count , p->data);
90 p = p->next;
91 }
92 }
93 void prompt()
94 {
95 printf("请输入1-5\n");
96 printf("1.初始化链表\n");
97 printf("2.创建链表\n");
98 printf("3.定位元素\n");
99 printf("4.插入一个元素\n");
100 printf("5.输出所有元素\n");
101 }
102 void menu()
103 {
104 int flag;
105 LinkNode *p = L;
106 int i;
107 int x;
108 int n;
109 system("cls");
110 prompt();
111 scanf("%d",&n);
112 switch(n)
113 {
114 case 1:
115 system("cls");
116 initList(L);
117 printf("初始化成功!\n");
118 system("pause");
119 menu();
120 break;
121 case 2:
122 system("cls");
123 printf("请输入您需要使用什么数字结束输入:");
124 scanf("%d",&flag); //定义输入结束符
125 creatList(p->next , flag);
126 system("cls");
127 printf("创建成功!\n");
128 system("pause");
129 menu();
130 break;
131 case 3:
132 system("cls");
133 printf("请输入您需要定位的元素的序号:");
134 scanf("%d",&i);
135 printf("该元素地址为:%d\n",locate(L->next , i));
136 system("pause");
137 system("cls");
138 system("pause");
139 menu();
140 break;
141 case 4:
142 system("cls");
143 printf("请输入您需要插入的位置和数值:");
144 scanf("%d %d",&i , &x);
145 instNode(L->next , i , x);
146 system("pause");
147 system("cls");
148 menu();
149 break;
150 case 5:
151 system("cls");
152 show(L->next);
153 system("pause");
154 system("cls");
155 menu();
156 break;
157 }
158 }
159 main()
160 {
161 menu();
162 }