C线性表的链式存储实现步骤及代码

C线性表的链式存储实现步骤及代码,第1张

概述本文章向大家介绍线性表的链式存储实现步骤代码,需要的朋友可以参考一下

线性表的链式存储

链式结构存储密度小,存储空间利用率低

只能顺序存储(其中指针域用来表明节点间的关系)

插入和删除 *** 作方便

初始化线性表 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线性表的链式存储实现步骤及代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存