线性表的链式存储及相关操作 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 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 && i 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 && i 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 && i 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. /**************************************************/ 因篇幅问题不能全部显示,请点此查看更多更全内容