鱼C论坛

 找回密码
 立即注册
查看: 2320|回复: 0

[技术交流] C++实现一个单链表

[复制链接]
发表于 2018-2-18 15:48:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 int_lyc 于 2018-2-18 15:53 编辑

最近看了数据结构和算法入门,自己用C++实现了一个单链表


                               
登录/注册后可看大图



过程如下:

定义一个点类
两个数据成员,一个存储数据,一个点类指针;

  1. class Point
  2. {
  3.     public:
  4.     int num;
  5.     Point *next;
  6. };
复制代码


定义一个链类
一个数据成员,指向空节点的点类指针;

  1. class List
  2. {
  3. private:
  4.     Point *first = new Point();
  5. };
复制代码


然后是一些函数
构造函数、析构函数、接口函数;
<为了更好体现程序的工作,我加入了许多解释性的语句>

构造函数:

  1. List(){std::cout<<"创建了一个单链表\n";}
复制代码


析构函数:
<析构函数删除每一个new出来的点类对象,并提示>

  1. List()
  2. {
  3.     Point *p,*q;
  4.     p = first->next;
  5.     while(p != NULL)
  6.     {
  7.         q = p;
  8.         p = p->next;
  9.         std::cout<<"析构了元素"<<q->num<<"\n";
  10.         delete q;
  11.     }
  12.     std::cout<<"析构了一个单链表\n";
  13. }
复制代码


然后是增加、删除、打印函数:

增加:
<重载了增加函数>
<加在链尾用一个临时点类指针,插入用两个临时点类指针移到要加入的位置,然后new一个点类对象>
  1. void add(int number);//加在链尾
  2. void add(int number,int addr);//第二个参数是加入的位置
复制代码


删除:
<两个临时指针,移到删除的位置,判断是否超过链表长度,通过变化删除要删除的对象>

  1. void del(int addr);
复制代码


打印:
<用一个临时指针遍历链表,打印出每一个点类对象储存的内容>

  1. void print();
复制代码


最后又增加了排序函数:

排序:
<先写一个函数返回数组长度>

  1. int len();
复制代码


<然后用冒泡排序实现链表的排序>

  1. for(int i=0;i<len();i++)
  2. {
  3.     for(int j=0;j<len()-i-1;j++)
  4.     {
  5.         if(temp->next->num > temp->next->next->num)
  6.         {
  7.             q = temp->next;
  8.             p = temp->next->next;
  9.             temp->next = p;
  10.             q->next = p->next;
  11.             p->next = q;
  12.         }
  13.         temp = temp->next;
  14.     }
  15.     temp = first;
  16. }
复制代码


至此,一个简陋的单链表完成;



                               
登录/注册后可看大图



附上代码:
[Single_Linked_List](https://github.com/int-lyc/Single_Linked_List)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 18:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表