数据结构---双向循环链表(C++)

1.概念

1.链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域data,另一个是存储下一个结点地址的指针域 next。最后一个结点的next为空。(怪我自己描述不了,就把百度百科的拿来了)
在这里插入图片描述
在用程序实现时,除了第一个结点以外,链表中的其他结点都可以通过前一个结点的指针域(存储了下一个结点地址)来定位,但我们该如何寻找链表的第一个结点呢?我们需要建立一个头指针来指向链表的第一个结点,这样我们就能通过头指针寻找到链表中的所有结点并进行操作。

2.双向循环链表

双向循环链表即在单链表(上文描述的链表为单链表)的基础上进行改进,每个结点不光有存储下一个结点地址的指针域 next,还增加了存储上一个结点地址的指针域 prev,其中头(第一个结点)的 prev 指向尾结点(最后一个结点),尾结点的 next 指向头结点。
在这里插入图片描述

2.实现

在操作时创建 temp 指针指向链表中各元素,更改 prev 及 next 指向的结点就可以实现对链表的基本增删查改等操作。

1. list.h

struct Node
{
   
    int data;
    Node *next, *prev;
    Node(int x) : data(x), next(nullptr), prev(nullptr) {
   };
};

class List
{
   
private:
    Node *head;
    int length;
public:
    List();
    bool list_insert(int x, int pos); //插入元素x到指定位置pos
    int list_search(int x); //查找元素x,返回所在位置
    bool list_delete(int x); //删除元素x
    int get_data(int pos); //获取指定位置的元素
    bool modify_data(int x, int pos); //修改指定位置元素数据
    int get_length(); //获取链表长度
    void traverse(); //遍历链表
};

2. List()

由于最开始链表中还没有元素,所以在构造函数中,指定 head 指针为空指针,链表长度 length为 0 。

List::List()
{
   
    head = nullptr</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值