线性表的链式存储
链式结构存储密度小,存储空间利用率低
只能顺序存储(其中指针域用来表明节点间的关系)
插入和删除 *** 作方便
初始化线性表 InitList(L)
销毁线性表 DestoryList(L)
判断线性表是否为空 listempty(L)
求线性表的长度 ListLength(L)
输出线性表 Displist(L)
求线性表中某个数据元素值 GetElem(L,i,e)
按元素值查找 LocateElem(L,e)
插入数据元素 ListInsert(L,e)
删除数据元素 ListDelete(L,e)
代码如下:
1 #include
2 #include
3 typedef int ElemType;
4
5 typedef struct LNode {
6 ElemType data;
7 struct LNode *next;
8 } linkList;
9
10 /*建立单链表*/
11 /*头插法*/
12 voID CreateListF(linkList* &L,ElemType a[],int n) {
13 L = (linkList *)malloc(sizeof(linkList));
14 L -> next = NulL;
15
16 int i;
17 linkList *s;
18 for(i = 0; i < n; i++) {
19 s = (linkList *)malloc(sizeof(linkList));
20 s -> data = a[i];
21 s -> next = L -> next;
22 L -> next = s;
23 }
24 }
25
26 /*尾插法*/
27 voID CreateListR(linkList* &L,int n) {
28 L = (linkList *)malloc(sizeof(linkList));
29 L -> next = NulL;
30
31 linkList *p;//指针 p 来进行 *** 作
32 p = L;
33
34 linkList *s;
35 int i;
36 for(i = 0; i < n; i++) {
37 s = (linkList *)malloc(sizeof(linkList));
38 s -> data = a[i];
39 p -> next = s;
40 p = s;
41 }
42 p -> next = NulL;
43 }
44
45 /*基本运算*/
46 /*初始化线性表 InitList(L)*/
47 voID InitList(linkList* &L) {
48 L = (linkList *)malloc(sizeof(linkList));
49 L -> next = NulL;
50 }
51
52 /*销毁线性表 DestoryList(L)*/
53 voID DestoryList(linkList* &L) {
54 linkList *pre = L;
55 linkList *p = L -> next;
56
57 while(p != NulL) {
58 free(pre);
59 pre = p;
60 p = p -> next;
61 }
62
63 free(pre);
64 }
65
66 /*判断线性表是否为空 listempty(L)*/
67 bool listempty(linkList* L) {
68 return L -> next == NulL;
69 }
70
71 /*求线性表的长度 ListLength(L)*/
72 int ListLength(linkList* L) {
73 linkList *p = L;
74 int i = 0;
75
76 while(p -> next != NulL) {
77 p = p -> next;
78 i++;
79 }
80
81 return i;
82 }
83
84 /*输出线性表 Displist(L)*/
85 voID Displist(linkList* L) {
86 linkList *p = L -> next;
87
88 while(p != NulL) {
89 printf("%d ",p -> data);
90 p = p -> next;
91 }
92
93 printf("n");
94 }
95
96 /*求线性表中某个数据元素值 GetElem(L,e)*/
97 bool GetElem(linkList* L,int i,ElemType &e) {
98 linkList *p = L;
99
100 int k = 0;
101 while(k < i && p != NulL) {
102 k++;
103 p = p ->next;
104 }
105
106 if (p == NulL) {
107 return false;
108 } else {
109 e = p -> data;
110 return true;
111 }
112 }
113
114 /*按元素值查找 LocateElem(L,e)*/
115 int LocateElem_wq(linkList* L,ElemType e) {
116 linkList *p = L;
117
118 int k = 0;
119 while(p != NulL) {
120 if (e == p -> data) {
121 return k;
122 }
123 p = p -> next;
124 k++;
125 }
126
127 return 0;
128 }
129
130 int LocateElem(linkList* L,ElemType e) {
131 linkList *p = L -> next;
132
133 int k = 1;
134 while(p != NulL && e != p -> data) {
135 p = p -> next;
136 k++;
137 }
138
139 if (p == NulL) {
140 return 0;
141 } else {
142 return k;
143 }
144 }
145
146 /*插入数据元素 ListInsert(L,e)*/
147 bool ListInsert(linkList* &L,ElemType e) {
148 linkList *p = L;
149
150 int k = 0;
151 while(k < i - 1 && p != NulL) {//找到前驱节点
152 p = p -> next;
153 k++;
154 }
155
156 if (p == NulL) {
157 return false;
158 } else {
159 linkList *s;
160 s = (linkList *)malloc(sizeof(linkList));
161 s -> data = e;
162 s -> next = p -> next;
163 p -> next = s;
164 return true;
165 }
166 }
167
168 /*删除数据元素 ListDelete(L,e)*/
169 bool ListDelete_wq(linkList* &L,ElemType &e) {
170 linkList *pre = L;//保存第 i 个指针的前驱
171 linkList *p = L -> next;//保存第 i 个指针的位置
172
173 int k = 1;
174 while(k < i && p != NulL) {
175 pre = pre -> next;
176 p = p -> next;
177 k++;
178 }
179
180 if (p == NulL) {
181 return false;
182 } else {
183 e = p ->data;
184 pre -> next = p -> next;
185 free(p);
186 return true;
187 }
188 }
189
190 bool ListDelete(linkList* &L,ElemType &e) {
191 linkList *pre = L;//保存第 i 个指针的前驱
192
193 int k = 0;
194 while(k < i - 1 && pre != NulL) {
195 pre = pre -> next;
196 k++;
197 }
198
199 if (pre == NulL) {
200 return false;
201 } else {
202 linkList *p;
203 p = pre -> next;
204 if (p == NulL) {
205 return false;
206 }
207 e = p -> data;
208 pre -> next = p -> next;
209 free(p);
210 return true;
211 }
212 }
213
214 int main(int argc,char const *argv[]) {
215 int a[] = {1,2,3,4,5,6,7,8,9};
216 linkList *L;
217 InitList(L);
218 //CreateListR(L,a,9);
219 CreateListF(L,9);
220 Displist(L);
221 printf("length = %dn",ListLength(L));
222 ElemType e;
223 GetElem(L,e);
224 printf("fourth number = %dn",e);
225 printf("%d is located at %dn",e,LocateElem_wq(L,6));
226 ListInsert(L,10);
227 Displist(L);
228 ListDelete_wq(L,e);
229 Displist(L);
230 return 0;
231 }
加号求调戏
这儿是运行结果哦:
9 8 7 6 5 4 3 2 1
length = 9
fourth number = 6
6 is located at 4
9 10 8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
总结以上是内存溢出为你收集整理的C线性表的链式存储实现步骤及代码全部内容,希望文章能够帮你解决C线性表的链式存储实现步骤及代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)