• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 用C++类实现单向链表的增删查和反转操作方法

用C++类实现单向链表的增删查和反转操作方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++链表类,用c++实现单链表,c++创建单链表,链表c++,c++链表的创建等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

数据结构这东西,理解起来不算难,但是实现难度就不小了,虽然思路很清晰,但不知道从何下手还有语言的细节问题一直是阻碍初学者的主要障碍(比如我)。今天用了一下午时间终于独立完成了链表操作。

找网上的代码,大多用了结构体,还有些并不适合刚学c++或者数据结构的人看,于是我是用类写的,代码比较符合学生的习惯和水平。

先看类定义

class node
{
public:
  int data;
  node *next;
};
class linklist
{
  node *h;
  ……//一些函数
}
</div>

两个类,node用来表示结点,node *next,表示next是指向node型的指针(一些同学看不懂这句,会和构造函数弄混),linklist类是存放头指针和定义操作函数用的。

一、整表的创建

整表创建有两种方法,头插(倒叙)和尾插(顺序),这里只说头插。

void head(linklist &l,int n)
  {
    node *p;
    p=new node;
    l.h=p;//定义头结点和投指针
    p->data=n;//头指针的数据域是结点个数
    p->next=NULL;//最末结点的后继必须为空
    for(int i=0;i<n;i++)//创建n个新结点
    {
      node *q=new node;
      cin>>q->data;
      q->next=p->next;
      p->next=q;//每个新结点都放在头结点后面
    }
  }
</div>

二、单结点插入

void insert(linklist &l,int n,int num)
  {
    node *p=l.h;
    for(int i=0;i<n;i++)
    {
      p=p->next;
    }//找到插入的位置
    node *q=new node;
    q->next=p->next;
    p->next=q;
    q->data=num;
  }
</div>

三、单结点删除

void del(linklist &l,int n)
  {
    node *p=l.h;
    for(int i=0;i<n-1;i++)
    {
      p=p->next;
    }//找到删除的位置
    node *q=p;
    q=q->next;
    p->next=q->next;
    delete q;//释放空间
  }
</div>

四、查找结点

void search(linklist &l,int n)
  {
    node *p=l.h;
    for(int i=0;i<n;i++)
    {
      p=p->next;
    }
    cout<<p->data<<endl;
  }
</div>

五、倒置

由于头插是倒叙输出,就想倒置,网上好多代码都是新建一个链表,或者用到尾指针双向链表之类,我觉得不会这么麻烦于是就想了这么个算法

void reverse(linklist l)
  {
    node *p=l.h;
    node *q;
    p=p->next;
    while(p->next)
    {
     q=p->next;
     p->next=q->next;
    // q->next=p;  //如果把下面两句换成这句,就会悲剧。
     q->next=l.h->next;
     l.h->next=q;
    }
  }
</div>

一下午时间主要就耽误在这里了,我一开始写的就是注释那句话,后来总是输出头结点的数据,仔细观察发现原来是头指针跟着头结点换到了最后面,然后这个问题通过下面两句解决,保证头指针永远在表头。

六、结语

写到这里,终于明白为什么网上包括书上很多代码都是看懂容易写起来难,因为书或者博客作者就不会把他犯过的错误贴出来,一些简单的代码也没有很多注释,自己写的时候也理解他们了,想详细写出每一步的理由还是太难了,无法表达的东西太多,所以想掌握一个东西还是亲手实践,多犯错误才能进步,因为书上或网上很难找到细节之处易犯的错误,以为自己会了的时候就用纸写出来,到头来会发现还是不会……循环几次,就差不多了。

以上这篇用C++类实现单向链表的增删查和反转操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++删除链表中间节点的方法
  • C++数据结构与算法之判断一个链表是否为回文结构的方法
  • 用C++类实现单向链表的增删查和反转操作方法
  • C++实现接两个链表实例代码
  • C++ 单链表的基本操作(详解)
  • C++ 双链表的基本操作(详解)
  • C++实现的链表类实例
  • C++链表倒序实现方法
  • c++双向链表操作示例(创建双向链、双向链表中查找数据、插入数据等)

相关文章

  • 2017-05-28C++中char*转换为LPCWSTR的解决方案
  • 2017-05-28详细分析Android中实现Zygote的源码
  • 2017-05-28深入理解大数与高精度数的处理问题
  • 2017-05-28C++中的friend函数详细解析
  • 2017-05-28C语言对栈的实现基本操作
  • 2017-05-28C++中函数的用法小结
  • 2017-05-28C语言中获取和改变目录的相关函数总结
  • 2017-08-30C++ 多线程 小记
  • 2017-05-28opencv 做人脸识别 opencv 人脸匹配分析
  • 2017-05-28浅析c++中new和delete的用法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言 位运算详解及示例代码
    • C语言实现字符转unix时间戳的简单实例
    • c++中.dll与.lib文件的生成与使用的详解
    • MFC实现在文件尾追加数据的方法
    • C++类的静态成员初始化详细讲解
    • 指针与const限定符的使用分析
    • C语言冒泡排序法心得
    • 简明的C++函数指针学习教程
    • 基于C语言EOF与getchar()的使用详解
    • C++基础入门教程(六):为什么创建类的时候要用new?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有