鱼C论坛

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

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

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

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

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

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

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


                               
登录/注册后可看大图



过程如下:

定义一个点类
两个数据成员,一个存储数据,一个点类指针;
class Point
{
    public:
    int num;
    Point *next;
};

定义一个链类
一个数据成员,指向空节点的点类指针;
class List
{
private:
    Point *first = new Point();
};

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

构造函数:
List(){std::cout<<"创建了一个单链表\n";}

析构函数:
<析构函数删除每一个new出来的点类对象,并提示>
List()
{
    Point *p,*q;
    p = first->next;
    while(p != NULL)
    {
        q = p;
        p = p->next;
        std::cout<<"析构了元素"<<q->num<<"\n";
        delete q;
    }
    std::cout<<"析构了一个单链表\n";
}

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

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

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

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

最后又增加了排序函数:

排序:
<先写一个函数返回数组长度>
int len();

<然后用冒泡排序实现链表的排序>
for(int i=0;i<len();i++)
{
    for(int j=0;j<len()-i-1;j++)
    {
        if(temp->next->num > temp->next->next->num)
        {
            q = temp->next;
            p = temp->next->next;
            temp->next = p;
            q->next = p->next;
            p->next = q;
        }
        temp = temp->next;
    }
    temp = first;
}

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



                               
登录/注册后可看大图



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

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 20:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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