您的当前位置:首页正文

线性表的链式存储及相关操作 C语言版

2022-05-25 来源:步旅网


线性表的链式存储及相关操作 C语言版 zhuyi2654715分类: 数据结构2011-08-30 17:20 91人阅读 评论(0) 收藏 举报 [cpp] view plaincopy 1. /*

2. 线性表的链式存储实现及相关操作 C语言版本 3. 作者:Shmily

4. 日期:2011年8月30日 5. 编译环境 VC++6.0

6. 带头结点的单链表,结点的下标从1开始 7. */

8. /**************************************************/ 9. #include 10. #include 11. #include

12. /**************************************************/ 13. #define OK 1 14. #define ERROR 0 15. #define TRUE 1 16. #define FALSE 0

17. typedef int Status; 18. typedef int ElemType;

19. /**************************************************/ 20. typedef struct node{

21. ElemType data; //数据域 22. struct node *next; //指针域 23. }Node, *pNode;

24. /**************************************************/ 25. //创建一个带头结点的空的单链表 26. pNode CreateListHead(void) 27. { 28.

29. pNode L = (pNode)malloc(sizeof(Node)); 30. if (!L) 31. exit (-1); 32. L->next = NULL; 33. return L; 34. }

35. /**************************************************/ 36. //输出单链表

37. void DisLinkList(pNode L)

38. {

39. pNode p = L->next; 40. while (p) 41. {

42. printf(\"%d \", p->data); 43. p = p->next; 44. } 45. }

46. /**************************************************/ 47. //求单链表的长度

48. int ListLength(pNode L) 49. {

50. pNode p = L->next; 51. int k=0; 52. while (p) 53. {

54. p = p->next; 55. ++k; 56. }

57. return k; 58. }

59. /**************************************************/ 60. //取得链表中第pos个结点的值并存入e中

61. Status GetElem(pNode L, int pos, ElemType *e) 62. {

63. pNode p=L->next; 64. int i=1; 65.

66. while (p && i68. p = p->next; 69. ++i; 70. } 71.

72. if (!p || i>pos) 73. return ERROR; 74. *e = p->data; 75. return OK; 76. }

77. /**************************************************/ 78. //在链表中的第pos个位置插入一个值为e的结点 79. Status ListInsert(pNode L, int pos, ElemType e) 80. {

81. pNode p = L;

82. pNode pNew; 83. int i=1; 84.

85. while (p && i87. p = p->next; 88. ++i; 89. } 90.

91. if (!p || i>pos) 92. return ERROR; 93.

94. pNew = (pNode)malloc(sizeof(Node)); 95. pNew->data = e; 96. pNew->next = p->next; 97. p->next = pNew; 98. return OK; 99. }

100. /**************************************************/ 101. //删除链表L中的第pos个结点并将该结点的值存入e中 102. Status ListDelete(pNode L, int pos, ElemType *e) 103. {

104. pNode p = L; 105. pNode q; 106. int i=1; 107.

108. while (p->next && i110. p = p->next; 111. ++i; 112. } 113.

114. if (!(p->next) || i>pos) 115. return ERROR; 116. q = p->next; 117. p->next = q->next; 118. *e = q->data; 119. free(q); 120. return OK; 121. }

122. /**************************************************/ 123. int main(void) 124. {

125. pNode L;

126. ElemType e; 127. int pos=7;

128. L = CreateListHead(L); 129. return 0; 130. }

131. /**************************************************/

因篇幅问题不能全部显示,请点此查看更多更全内容