当前位置:   article > 正文

链表(详解)- C++(逆序创建链表-头插法)_c++链表逆序

c++链表逆序

问题引入

        链表的创建分为“顺序创建(尾插法)”、“逆序创建(头插法)”两种方式。

        关于“链表”的分析请参考文章:“链表(详解)- C++(顺序创建链表-尾插法)”(点击查看)。具体的分析均在文章中,在此我们不做过多的解释,你可以先看上述文章之后再返回看此篇文章。

        如果你想要进一步了解“顺序创建”线性表,请参考上述文章。

特别注意:

        “逆序创建”时,输出顺序 输入顺序相反的哦。

        例如:

                        输入: a b c d e f g

                        输出的时候为:g f e d c b

        因为“逆序创建” 是:先插入的数据在最末端后插入的数据在前端

代码实现

        说明:采用C++语言,编译环境为DevC++。

  1. //导入头文件
  2. #include<malloc.h>
  3. #include<iostream>
  4. using namespace std;
  5. //定义链表
  6. typedef struct Lnode{
  7. char data;//数据域 (可以根据需要修改 数据域 数据类型)
  8. struct Lnode *next;//指针域
  9. }Lnode,*Linklist;
  10. //逆序创建链表
  11. void Createlist(Linklist &L){
  12. Linklist p;
  13. L=(Lnode *)malloc(sizeof(Lnode));//分配空间
  14. L->next=NULL;
  15. p=(Lnode *)malloc(sizeof(Lnode));
  16. cout<<"请输入数据字符,以“#”结束:"<<endl;
  17. cin>>p->data;
  18. while(p->data !='#'){
  19. p->next=L->next;
  20. L->next=p;
  21. p=(Lnode *)malloc(sizeof(Lnode));
  22. cin>>p->data;
  23. }
  24. }
  25. //输出
  26. void Printlist(Linklist L){
  27. cout<<"\n表中的数据为:\n";
  28. Linklist p;
  29. p=L->next;
  30. while(p != NULL){
  31. cout<<p->data<<' ';//输出对应结点中的数据
  32. p=p->next;
  33. }
  34. cout<<endl;//换行
  35. }
  36. //插入
  37. void Insertlist(Linklist &L,int i,char e){
  38. Linklist p;
  39. Linklist s;
  40. int k=1;
  41. p=L->next;
  42. while(p && k<i-1){
  43. p=p->next;
  44. k++;
  45. }
  46. s=(Lnode *)malloc(sizeof(Lnode));
  47. s->data=e;
  48. s->next=p->next;
  49. p->next=s;
  50. }
  51. //删除
  52. void Deletelist(Linklist &L,int i){
  53. Linklist p;
  54. Linklist s;
  55. char e;
  56. int k=1;
  57. p=L->next;
  58. while(p && k<i-1){
  59. p=p->next;
  60. k++;
  61. }
  62. s=p->next;
  63. p->next=s->next;
  64. e=s->data;
  65. cout<<"被删除的数据元素为:"<<e<<endl;
  66. }
  67. //主函数
  68. int main(){
  69. Linklist L;
  70. int i;
  71. char e;
  72. int d;
  73. Createlist(L);
  74. Printlist(L);
  75. cout<<"第几个位置前插入元素";
  76. cin>>i;
  77. cout<<"插入的新 字符 为"<<endl;
  78. cin>>e;
  79. Insertlist(L,i,e);//调用插入函数
  80. cout<<"插入新字符后的表格数据如下"<<endl;
  81. Printlist(L);//输出线性表中的数据
  82. cout<<"输入删除第几个元素";
  83. cin>>d;
  84. Deletelist(L,d);//调用插入函数
  85. cout<<"删除元素后表格数据如下"<<endl;
  86. Printlist(L);//输出线性表中的数据
  87. }

运行结果

写在最后:

        读两遍下来,如果仍然有不清楚的地方,可在评论区留言。

        如果你有其他感到困惑的问题,欢迎留言。

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

闽ICP备14008679号