当前位置:   article > 正文

单链表的各种操作_编写一个程序 linklist.cpp, 实现单链表的各种基本运算和整体建表算(假设单表的元

编写一个程序 linklist.cpp, 实现单链表的各种基本运算和整体建表算(假设单表的元
  1. #include<iostream>
  2. #define _CRT_SECURE_NO_WARNINGS
  3. using namespace std;
  4. typedef int DATA;
  5. struct SNode //定义节点
  6. {
  7. DATA data;
  8. SNode* pNext;
  9. };
  10. class CList //创建一个链表类
  11. {
  12. SNode* m_hHead; //链表初始化
  13. char m_name[20];
  14. public:
  15. CList() //构造函数初始化链表
  16. {
  17. m_hHead = NULL;
  18. }
  19. void Setname(const char* p)
  20. {
  21. strcpy(m_name, p);
  22. }
  23. void AddHead(DATA data) //头部插入
  24. {
  25. SNode* p = new SNode; //创建新的节点
  26. p->data = data; //数据域
  27. p->pNext = m_hHead; //指针域
  28. m_hHead = p; //链表初始头
  29. }
  30. void AddTail(DATA data) //尾插入
  31. {
  32. SNode* pNew = new SNode; //创建新的节点
  33. pNew->data = data; //数据域
  34. pNew->pNext = NULL; //指针域
  35. if (!m_hHead) //没有头节点情况下
  36. {
  37. m_hHead = pNew; //将新创建节点设置为头节点
  38. return;
  39. }
  40. SNode* p = m_hHead; //防止异常
  41. while (p->pNext != NULL) //遍历到最后一个节点
  42. p = p->pNext;
  43. p->pNext = pNew;
  44. }
  45. int Delete(DATA data) //删除节点
  46. {
  47. SNode* p = m_hHead, *p1 = NULL;//*p1用来记录前一个节点地址
  48. if (!p)
  49. return 0;
  50. if (p->data == data) //当要删除节点为头节点的情况
  51. {
  52. m_hHead = p->pNext;
  53. free(p);
  54. return 1;
  55. }
  56. while (p)
  57. {
  58. if (p->data == data)
  59. {
  60. p1->pNext = p->pNext;
  61. free(p);
  62. return 1;
  63. }
  64. p1 = p;
  65. p = p->pNext;
  66. }
  67. }
  68. void Print() //打印节点
  69. {
  70. cout << m_name << endl;
  71. SNode* p = m_hHead;
  72. while (p)
  73. {
  74. cout << p->data << endl;
  75. p = p->pNext;
  76. }
  77. }
  78. void Modify(DATA data, DATA newData)//修改某处节点
  79. {
  80. SNode* p = m_hHead;
  81. while (p)
  82. {
  83. if (p->data == data)
  84. p->data = newData;
  85. p = p->pNext;
  86. }
  87. }
  88. int Find(DATA data) //查找节点
  89. {
  90. SNode*p = m_hHead;
  91. int i = 0; //用于返回当前节点查找到的位置
  92. while (p)
  93. {
  94. if (p->data == data)
  95. return i + 1;//代表成功,返回的位置
  96. p = p->pNext;
  97. ++i;
  98. }
  99. return -1;//代表失败
  100. }
  101. int GETLIST() //返回节点总数量
  102. {
  103. SNode* p = m_hHead;
  104. int i = 0;
  105. while (p)
  106. {
  107. i++;
  108. }
  109. return i;
  110. }
  111. };
  112. int main()
  113. {
  114. CList A,B;
  115. A.Setname("LIST1: ");
  116. A.AddHead(10);
  117. A.AddHead(9);
  118. A.AddHead(8);
  119. A.AddHead(7);
  120. A.AddHead(6);
  121. A.AddHead(5);
  122. B.Setname("LIST2: ");
  123. B.AddHead(4);
  124. B.AddHead(3);
  125. B.AddHead(2);
  126. B.AddHead(1);
  127. B.AddHead(0);
  128. A.Print();
  129. B.Print();
  130. system("pause");
  131. return 0;
  132. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/470629
推荐阅读
相关标签
  

闽ICP备14008679号