目录
链表操作(初级)
一、实验目的
掌握链表的基本算法并完成对链表各个功能的实现
二、实验内容
链表的基本运算实现,要求至少具有以下功能:
- 链表建立
- 插入运算
- 删除运算
- 查找运算
- 判断是否为空
三、实验代码(包括运行结果截图)
1. #include<stdio.h>
2. #include<stdlib.h>
3.
4. /*定义*/
5. typedef int DataType;
6. struct Node{
7. int n;
8. DataType info;
9. struct Node *link;
10. };
11. typedef struct Node *LinkList;
12. typedef struct Node *PNode;
13.
14. LinkList initLinkList()
15. {
16. LinkList head;
17. head = (LinkList)malloc(sizeof(struct Node));
18. if (head == NULL)
19. {
20. printf("内存分配失败!\n");
21. return 0;
22. }
23. head->link = NULL;
24. return head;
25. }
26.
27. /*创建链表*/
28. void createLinkList(LinkList head)
29. {
30. LinkList rear;
31. PNode p;
32. head->n = 0;
33. int m;
34. rear = head;
35. scanf_s("%d", &m);
36. while (m != -1)
37. {
38. p = (PNode)malloc(sizeof(struct Node));
39. p->info = m;
40. p->link = NULL;
41. rear->link = p;
42. rear = p;
43. head->n ++ ;
44. scanf_s("%d", &m);
45. }
46. }
47.
48. /*插入运算*/
49. /*查找i所在节点p*/
50. PNode Locate_i(LinkList llist, int i)
51. {
52. PNode p; int count = 0;
53. p = llist->link;
54. While (Count < i)
55. {
56. p = p->link;
57. count++;
58. }
59. return p;
60. }
61.
62. /*判断是否为空*/
63. int isEmptyLinkList(LinkList llist)
64. {
65. return (llist->link == NULL);
66. }
67.
68. /*查找p所指结点的前驱结点*/
69. PNode locatePre_link(LinkList llist, PNode p)
70. {
71. PNode p1;
72. if (isEmptyLinkList(llist))
73. return 0;
74. p1 = llist;
75. while (p1 != NULL&&p1->link != p)
76. p1 = p1->link;
77. return p1;
78. }
79.
80. /*后插法*/
81. int insertPost_link(LinkList llist, PNode p, DataType x)
82. {
83. PNode q = (PNode)malloc(sizeof(struct Node));
84. if (q == NULL)
85. {
86. printf("out of space!\n");
87. return 0;
88. }
89. Else
90. {
91. q->info = x;
92. q->link = p->link;
93. p->link = q;
94. return 1;
95. }
96. }
97.
98. /*前插法*/
99. int insertPre_link(LinkList llist, PNode p, DataType x)
100. {
101. PNode p1 = (PNode)malloc(sizeof(struct Node));
102. if (p1 == NULL)
103. return 0;
104. p1 = llist;
105. while (p1 != NULL&&p1->link != p)
106. p1 = p1->link;
107. insertPost_link(llist, p1, x);
108. return 1;
109. }
110.
111. /*删除运算*/
112. int deleteLinkList(LinkList llist, DataType x)
113. {
114. PNode p, q;
115. p = llist;
116. if (p == NULL)
117. return 0;
118. while (p->link != NULL&&p->link->info != x)
119. p = p->link;/*找值为x的节点的存储位置*/
120. if (p->link == NULL)
121. {
122. printf("No exist!\n");
123. return 0;
124. }
125. else
126. {
127. q = p->link;
128. p->link = q->link;
129. free(q);
130. return 1;
131. }
132. }
133.
134. /*查找运算*/
135. PNode findLinkList(LinkList llist, DataType x)
136. {
137. PNode p;
138. if (llist == NULL)
139. return 0;
140. p = llist->link;
141. while (p != NULL&&p->info != x)
142.