数据结构基础:双链表结构、实现

news2024/11/17 10:43:21

继续和颦颦学C语言呀.......>


双链表的结构

9f027f5396d04a2b97bd64c11f7b9f34.png

 这里的head 为头节点,是‘哨兵位’,实际不存储任何有效的数据

它的存在是为了遍历环链表避免死循环

双链表的实现

typedef int LTDataType;
typedef struct ListNode
{
struct ListNode* next; //指针保存下⼀个节点的地址
struct ListNode* prev; //指针保存前⼀个节点的地址
LTDataType data;
}LTNode;

头插

DLinkList HeadInsert(DLinkList &L)
{
    InitList(L); 
    int x;
    cin>>x;
    while(x!=9999)
    {
        LTNode *s = (LTNode *)malloc(sizeof(LTNode));
        s->data = x;
        if(L->next == NULL)
        {
            s->next = NULL;
            s->pre = L;
            L->next = s;
        }
        else
        {
            s->next = L->next;
            L->next->pre = s;
            s->pe = L;
            L->next = s;
        }
        cin>>x;
    }
    return L;
}

尾插 

DLinkList TailInsert(DLinkList &L)
{
    InitList(L);
    LTNode *s,*r=L;
    int x;
    cin>>x;
    while(x!=9999)
    {
        s = (LTNode *)malloc(sizeof(LTNode));
        s->data = x;
        s->next = NULL;
        s->pre = r;
        r->next = s;
        r = s;
        cin>>x;
    }
    return L;
}

遍历双链表

void PrintList(DLinkList L)
{
    DNode *p = L->next;
    while(p){
        cout<<p->data<<" ";
        p = p->next;
    }
    cout<<endl;
}

 查找

void Delete(DLinkList &L, int i)
{
    if(i<1 || i>Length(L))
    {
        cout<<"delete failed: index is wrong."<<endl;
        return;
    }
    LDNode *p = GetElem(L,i-1);
    LDNode *q = p->next;
    p->next = q->next; 
    q->next->pre = p; 
    free(q);
}

 

 代码需要大家自己多打打才会印象深刻哦加油

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1574731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么使用MQ????

1、异步处理 场景说明&#xff1a;用户注册后&#xff0c;需要发注册邮件和注册短信,传统的做法有两种 1.串行的方式 2.并行的方式。 串行方式: 将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。 这有一个问题是,邮件,短信并不是…

2024/4/1—力扣—二叉树的最近公共祖先

代码实现&#xff1a; 思路&#xff1a; 递归判断左子树和右子树&#xff0c;查找p或者q是否在当前节点的子树上 1&#xff0c;在同一子树上&#xff0c;同一左子树&#xff0c;返回第一个找到的相同值&#xff0c;同一右子树上&#xff0c;返回第一个找到的相同值 2&#xff0…

【每日刷题】Day4

【每日刷题】Day4 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; 目录 1. 83. 删除排序链表中的重复元素 - 力扣&#xff08;LeetCode&#xff09; 2. 88. 合并两个有序数组 - 力扣&#xff08;LeetCode&…

Windows SDK(六)组合框与列表框控件

组合框和列表框同样也是控件&#xff0c;所以我们在应用组合框和列表框时同样也需要父窗口&#xff0c;现在我们以 创建项目时程序自行创建的窗口作为父窗口展开如下的控件创建与应用 在进行组合框与列表框的讲解前&#xff0c;我们首先在程序中定义几个宏作为我们在编写程序…

C语言:顺序表专题

目录 一、数据结构之顺序表/链表1.数据结构相关概念1.1什么是数据结构1.2为什么需要数据结构 二、顺序表1.顺序表的概念及结构2.顺序表分类3.动态顺序表的实现 一、数据结构之顺序表/链表 1.数据结构相关概念 1.1什么是数据结构 数据结构是由“数据”和“结构”两词组合而来…

【优选算法专栏】专题十六:BFS解决最短路问题(一)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

云his系统源码 java源码saas模式 二甲医院his系统全套源码 数据库MySQL + MyCat

基层医院云HIS系统源码 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规功能&#xff0c;还能与公卫、PACS等各类外部系统融合&…

0基础学习python

0基础如何进入IT行业&#xff1f; 建议先掌握以下&#xff1a; 编程环境的安装和使用输出输入语句、变量、表达式的理解和使用选择结构、循环结构的理解和使用列表的使用文件的操作函数的调用库的安装和使用 编程&#xff0c;其实就是利用特定的语言控制计算机、或者就是与计算…

如何把音乐播放速度慢下来?享受慢音乐的两个方法

一&#xff0c;前言 在现代社会&#xff0c;我们生活在一个快节奏的环境中&#xff0c;时间仿佛被压缩成了碎片&#xff0c;每个人都在匆匆忙忙地追求着速度和效率。然而&#xff0c;有时放慢脚步&#xff0c;让心灵回归宁静&#xff0c;成为了一种难得的奢侈。 音乐&#xf…

民航电子数据库:在有分组统计的语句中,输出表达式含有非分组统计项

目录 一、场景二、报错信息三、排查四、原因五、解决 一、场景 1、对接民航电子数据库 2、执行SQL语句报错 二、报错信息 三、排查 查看数据库def_group_by_mode配置 show def_group_by_mode四、原因 def_group_by_mode设置为0导致&#xff0c;相当于mysql的sql_modeonly_…

NatCross实现NASCAB云可云内网穿透指南

一、简介 1、NAS_CAB介绍 跨平台NAS软件,远程管理照片,影音和文件&#xff0c;无需专用设备,个人版永久免费。官网地址&#xff1a;https://www.nascab.cn/。 2、NatCross介绍 NatCross是内网穿透工具,也是免费的端口映射和DDNS动态域名解析软件。软件从2021年上线以来&…

51单片机实验03-定时器T0来实现流水灯从左到右再从右到左

目录 一、实验目的 二、实验说明 1、51单片机有两个16位内部计数器/定时器&#xff08;C/T&#xff0c; Counter/Timer&#xff09;。 2、模式寄存器TMOD 1) M1M0工作模式控制位&#xff1b; 2) C/T定时器或计数器选择位&#xff1a; 3&#xff09;GATE定时器/计数器运行…

淘宝扭蛋机小程序源码搭建:打造专属电商娱乐新平台

在数字化浪潮的推动下&#xff0c;电商平台不断创新&#xff0c;以满足消费者日益多样化的需求。淘宝扭蛋机小程序作为一种创新的电商娱乐形式&#xff0c;受到了广大用户的热烈追捧。为了满足市场需求&#xff0c;许多企业和开发者开始关注淘宝扭蛋机小程序的源码搭建&#xf…

Centos7使用docker安装Jenkins(含pipeline脚本语句)

一、下载Jenkins docker pull jenkins/jenkins:lts 二、启动Jenkins docker run \-u root \--rm \-d \-p 8081:8080 \-p 50000:50000 \-v /root/docker/jenkins/var/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr…

渲染一帧特效需要多少钱?云渲染特效每帧成本

特效渲染的成本受到诸多因素的影响&#xff0c;每帧的渲染费用是评估整个项目预算的重要依据。随着云渲染技术的发展&#xff0c;其高效率和可伸缩性赢得了业界的广泛关注。对于影视制作公司和独立创作者而言&#xff0c;掌握云渲染特效的单帧成本是管理和优化预算分配的关键。…

Datacom HCIP笔记-路由策略与路由控制 之二

路由策略和策略的区别&#xff1f; 路由策略&#xff1a; 操作的对象是路由表条目&#xff0c; 实现路由过滤&#xff0c;从而实现访问控制&#xff0c;引入时过滤&#xff0c;发送和接收路由时过滤。 通过配置cost&#xff0c;来实现路径的控制。 策略路由&#xff1a; 对…

Redis数据库③主从复制+哨兵模式+集群模式

一.Redis主从复制 1.概念 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者称为从节点(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。 默认情况下&#xff0c;每台…

国内ChatGPT大数据模型

在中国&#xff0c;随着人工智能技术的迅猛发展&#xff0c;多个科技公司和研究机构已经开发出了与OpenAI的ChatGPT类似的大型语言模型。这些模型通常基于深度学习技术&#xff0c;尤其是Transformer架构&#xff0c;它们在大量的文本数据上进行训练&#xff0c;以理解和生成自…

若依 ruoyi-vue 接口挂载获取Resources静态资源文件权限校验

解决小程序图片打包过大&#xff0c;放置后端&#xff0c;不引用ngnix、minio等组件&#xff0c;还能进行权限校验 package com.huida.web.controller.common.app;import com.huida.common.core.controller.BaseController; import com.huida.common.utils.file.FileUtils; imp…

c++的学习之路:14、list(1)

本章讲一下如何使用list&#xff0c;代码在文章末 目录 一、list介绍 二、增 三、删 四、查和改 五、交换 六、代码 一、list介绍 首先还是看一看官方文档的介绍如下图&#xff0c;如下方五点&#xff1a; 1. list是可以在常数范围内在任意位置进行插入和删除的序列式…