当前位置:   article > 正文

单链表的建立(链式存储)_要求实现如下功能: (1)建立链表:自定义函数建立单链表来存放会员的信息,如果

要求实现如下功能: (1)建立链表:自定义函数建立单链表来存放会员的信息,如果

数据结构编程练习(二)

功能1:在构造函数完成带头结点单链表的初始化。

功能2:输入数据,利用尾插法完成链表生成。

功能3:求单链表表长。

功能4:求链表中第i个元素,要求返回第i个元素是否存在的结果,并返回第i个元素值及其结点地址。

功能5:在第i个结点前插入值为x的结点。

功能6:删除链表中第i个元素结点,需返回第i个结点是否存在的状态,并返回删除结点中存储的数据。

功能7:在析构函数中完成链表内存释放,声明一个对象,截图描述并说明其构造函数、析构函数调用顺序及过程。


代码实现:

  1. #include "iostream"
  2. using namespace std;
  3. struct node
  4. {
  5. int data;
  6. node *next;
  7. };
  8. class list
  9. {
  10. public:
  11. list();
  12. ~list();
  13. int create_L();
  14. int length();
  15. int get_element(int i);
  16. int insert(int i,int &x);
  17. int del_element(int i);
  18. int print();
  19. private:
  20. int count;
  21. node *head;
  22. };
  23. //单链表的初始化
  24. list::list()
  25. {
  26. head=new node;
  27. head->next=NULL;
  28. count=0;
  29. }
  30. //析构函数释放内存
  31. list::~list()
  32. {
  33. node *n=head;
  34. while(count--)
  35. {
  36. node *p=n->next;
  37. delete n;
  38. n=p;
  39. }
  40. }
  41. //尾插法建立单链表
  42. int list::create_L()
  43. {
  44. int m;
  45. cout<<"请输入所要建立的单链表的长度:";
  46. cin>>m;
  47. cout<<"请输入各元素:";
  48. node *n=head;
  49. while(m--)
  50. {
  51. node *p=new node;
  52. n->next=p;
  53. p->next=NULL;
  54. cin>>p->data;
  55. n=p;
  56. count++;
  57. }
  58. return 0;
  59. }
  60. //求单链表的长度
  61. int list::length()
  62. {
  63. return count;
  64. }
  65. //取第i个位置的元素
  66. int list::get_element(int i)
  67. {
  68. if(i<=0||i>count)
  69. {
  70. cout<<"不在范围"<<endl;
  71. return 0;
  72. }
  73. else
  74. {
  75. node *n=head;
  76. while(i--)
  77. n=n->next;
  78. cout<<"该位置的元素为:"<<n->data<<endl;
  79. return 1;
  80. }
  81. }
  82. //在第i个结点前插入值为x的结点
  83. int list::insert(int i,int &x)
  84. {
  85. if(i<=0||i>count)
  86. {
  87. cout<<"不在范围"<<endl;
  88. return 0;
  89. }
  90. else
  91. {
  92. node *n=head;
  93. i--;
  94. while(i--)
  95. n=n->next;
  96. node *p=new node;
  97. p->data=x;
  98. p->next=n->next;
  99. n->next=p;
  100. count++;
  101. return 1;
  102. }
  103. }
  104. //删除第i个位置元素
  105. int list::del_element(int i)
  106. {
  107. if(i<=0||i>count)
  108. {
  109. cout<<"不在范围"<<endl;
  110. return 0;
  111. }
  112. else
  113. {
  114. node *n=head;
  115. i--;
  116. while(i--)
  117. n=n->next;
  118. cout<<n->next->data<<"已被删除"<<endl;
  119. n->next=n->next->next;
  120. count--;
  121. return 1;
  122. }
  123. }
  124. //输出单链表
  125. int list::print()
  126. {
  127. node *n=head;
  128. cout<<"当前单链表为:";
  129. while(n->next!=NULL)
  130. {
  131. node *p=n->next;
  132. cout<<p->data<<" ";
  133. n=p;
  134. }
  135. cout<<endl;
  136. return 0;
  137. }
  138. int main()
  139. {
  140. list obj1;
  141. int n,x;
  142. obj1.create_L();
  143. obj1.print();
  144. cout<<"单链表的长度为:"<<obj1.length()<<endl;
  145. cout<<"请输入所要查找的位置:";
  146. cin>>n;
  147. obj1.get_element(n);
  148. obj1.print();
  149. cout<<"请输入所要插入的位置以及所要插入的元素:";
  150. cin>>n>>x;
  151. obj1.insert(n,x);
  152. obj1.print();
  153. cout<<"请输入所要删除的位置:";
  154. cin>>n;
  155. obj1.del_element(n);
  156. obj1.print();
  157. return 0;
  158. }


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

闽ICP备14008679号