双链表的定义、初始化、插入、删除,C++代码实现的算法

什么是双链表? 阅读详情
#include <iostream>

using namespace std;

/*双向链表类型定义*/
typedef struct duNode
{
    char data;
    struct duNode *prior;
    struct duNode *next;
}duNode;

typedef duNode *duLinklist;//指针类型,故访问它的成员用“->”。

/*初始化双向链表*/
void initLinklist_Du(duLinklist &L)//此处叫做引用调用,即实参和形参共用一个地址。
{
    L=new duNode;
    L->next=L;
    L->prior=L;
}


/*取某个结点的位置*/
duNode *getElemP_D(duLinklist L,int i)
{
    duNode *p;
    int count;

    p=L->next;
    count=1;

    while(p!=L&&count<i-1)
    {
        p=p->next;
        count++;
    }

    if(p==L||count>i-1)
        return NULL;
    else
        return p->next;
}


/*求双向链表的长度*/
int lengthLinklist_Du(duLinklist &L)
{

    duNode *p;
    int count;

    p=L->next;
    count=0;

    while(p!=L)
    {
        p=p->next;
        count++;
    }

    return count;
}


/*插入*/
void insertList_Du(duLinklist &L,int i,char x)
{
    duNode *p;
    duNode *s;
    p=getElemP_D(L,i);
    if(p==NULL)
        cout<<"Poision Error!";

    s=new duNode;
    s->data=x;
    s->prior=p->prior;
    s->next=p;
    p->prior->next=s;
    p->prior=s;
}

/*删除*/
void deleteList_Du(duLinklist &L,int i)
{
    duNode *p;
    p=getElemP_D(L,i);
    if(p==NULL)
        cout<<"Poision Error!";
    p->next->prior=p->prior;
    p->prior->next=p->next;
    delete p;
}


/*创建一个双向链表*/
void creatLinklist_Du(duLinklist &L,int n)
{
    duNode *p;
    duNode *s;
    initLinklist_Du(L);
    p=L;

    int i;
    for(i=0;i<n;i++)
    {
        s=new duNode;//这里忘记给S分配空间了,所以出错了。
        cin>>s->data;
        s->next=L;
        s->prior=p;
        p->next=s;
        L->prior=s;
        p=s;
    }
}


/*输出双向链表中的元素*/
void outputLinklist_Du(duLinklist &L)
{
    duNode *p;
    p=L->next;

    int i;
    for(i=0;i<lengthLinklist_Du(L);i++)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<endl;
}


void main()
{
    duLinklist L;
    creatLinklist_Du(L,3);
    //outputLinklist_Du(L);
}

出错了,要先自己仔细看看,自己找一下毛病,因为没有人比自己更熟悉自己的代码了!实在看不出哪错了,再去向别人请教!嘿嘿,努力啊!

C++链表实现插入、删除与排序操作实战详解 链表是一种基础但高效的线性数据结构,采用链式存储方式,通过指针将一组不连续的内存块串联起来。相较于数组,链表在插入和删除操作上具有更高的灵活性和效率,尤其适用于动态数据管理场景。其基本逻辑结构是由多个节点(Node)组成,每个节点包含两个核心部分:数据域和指针域。数据域用于存储有效数据,而指针域则指向下一个节点的地址,从而构建出链式结构。在C++中,节点结构通常使用结构体(struct)或类(class)实现。 阅读详情

相关推荐

实现顺序表的基本运算:初始化、插入、删除、求表的长度、判空、释放。

(1)初始化顺序表L (2)从标准输入(键盘)逐个数据输入a,b,c,d,e元素 ,建立顺序表 (3)输出顺序表L (4)输出顺序表L的长度 (5)判断顺序表L是否为空 (6)输出顺序表L的第3个元素 (7)输出元素a的位置 (8)在第4个元素位置上插入‘f’元素 (9)输出顺序表L (10)删除L的第3个元素 (11)输出顺序表L (12)释放顺序表L

数据结构之双链表

一、双链表的定义: 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。 二、代码功能: 1、 ...

C2395850595的博客 1772

Ubuntu22.04下安装LDAP

在Ubuntu22.04的时候可以使用apt的方式来安装,在安装LDAP的web 服务器的时候可以考虑选择 LDAP 帐户管理器 (LAM)。因为 PHPLDAPadmin 安装时需要 php 的环境依赖,相对来说安装麻烦。此外在 PHPLDAPadmin 中创建组织和用户时与平常的语法有很大不同,对新手来说不友好。

dl_11的博客 3944

双链表详解

目录 一.双链表的定义 二.要实现的功能 三.功能实现 0、创建结点 1、初始化 2、打印 3、尾插 4、尾删 5、头插 6、头删 7、任意插入 8、任意删除 9、查找 四.全部代码的实现 1、text.c 2、List.c 3、List.h 一.双链表的定义 由图这就是一个双链表,可以看出它是一个由尾和头双向指向的环,且每个结点之间都是双向指向的。 二.要实现的功能 双链表是一种数据结构,所谓数据结构就是用来储存数据的工具,功能大致就和基本储存数据的

weixin_63246064的博客 6416

Linux【实战】—— LAMP环境搭建 & 部署网站

由LinuxApacheMySQLPHP组成的一个web网络平台。

2201_75935630的博客 4980

Visual Studio 2022与Qt集成实战:解决Qt.props导入错误的完整指南

本文详细解析了在Visual Studio 2022中集成Qt开发时,如何解决因Qt.props文件导入失败导致的编译错误。文章从问题根源入手,深入剖析了Qt.props文件与QtMsBuild环境变量的关系,并提供了从检查文件存在性、配置环境变量到直接修改项目文件路径的完整排查与修复方案,帮助开发者快速恢复项目构建。

wdx01234567的博客 675

双链表详解(后附完整源代码)

工程系列的双链表

m0_73790767的博客 257

元数据管理:DataHub和OpenMetadata对比分析

DataHub和OpenMetadata都试图解决数据编目,搜索,发现,治理和质量方面的相同问题。这两种工具都是出于为需要支持大量数据源、团队和用例的大型组织解决这些问题而诞生的。尽管这些工具在发布历史和成熟度方面略有不同,但它们的功能存在显着重叠。

weixin_38030820的博客 6634

双链表初始化、头插、尾插、头删、尾删、任意位置插入和删除、判空、销毁、打印、查找操作

ListNode* buyDListNode(LTDataType data) { ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); if (NULL == newNode) { assert(0); return NULL; } newNode->data = data; newNode->prev = NULL; newNode->next = NULL; return newNode; } .

weixin_46153828的博客 1125

汽车软件工程师必看:ASPICE流程实战指南(附完整产物清单)

本文为汽车软件工程师提供ASPICE流程实战指南,详细解析如何搭建合规开发环境、各阶段文档产出清单及工具链整合策略。通过实战案例和模板资源,帮助团队高效实施ASPICE标准,提升软件开发质量与效率。

weixin_29230805的博客 470

基于PyQt5的ROS移动机器人的人机交互UI界面

每次做实验的时候,手动rosrun,roslaunch太过麻烦,通过ui界面的话,只需要点点按钮就可以啦 ros_car_py包括运动,建图,导航,ui界面的程序全部打包上传,相互依赖关系见ros_car_py包。 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets imp...

工大机器人工作室 7366

数据结构|C++线性表 基础到进阶 完整核心代码实现

本文介绍了C++中指针和结构体的基本概念及其在线性表顺序存储结构中的应用。主要内容包括: 指针基础:定义、解引用、内存占用、空指针与野指针、const修饰指针、指针与数组/函数的配合使用。 结构体:定义方式、结构体数组、结构体指针(->操作符)、嵌套结构体。 线性表顺序存储:通过结构体实现顺序表,包含数据元素数组和表长属性,支持直接访问相邻元素。顺序表的特点是地址连续、元素依次存放、类型相同,可通过下标快速定位。 这些知识为理解线性表的顺序存储实现奠定了基础。

2503_94115885的博客 173

在trae CN中使用conda环境(已解决)

Trae CN 是字节跳动于 2025 年 3 月 3 日发布的国内首个 AI 原生集成开发环境(AI IDE)123。

zwzscnds的博客 6938

2-1-2:双链表插入、删除图解及可运行代码实现

双链表:用3个数组实现的,而非指针题目来自于acwing平台,可自行百度此平台

weixin_45418543的博客 1215

kali2020.2安装出现的问题并附详细解决办法

kali2020.2的安装

weixin_48776804的博客 3049

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【C++】Day14 数组实现双链表 AcWing 827. 双链表 (算法基础课笔记)

Day14双链表 AcWing 827. 双链表

Remember who you are! 1431

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【数据结构 李春葆】第二章 线性表 上机实验题3【双链表】

实验题3:实现双链表的各种基本运算 编写一个程序DBLinklist.h和DBlinklist.cpp,实现单链表的各种基本运算和整体建表算法(元素类型ElemType为char)。在此基础上面设计一个exp2-3.cpp完成下面的功能。 初始化双链表h。 依次采用尾插法插入a,b,c,d,e元素。 输出双链表h。 输出双链表的长度。 判断双链表是否为空。 输出双链表的第3个元素。 输出元素a的...

memcpy0的博客 3797

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

扬帆数据结构算法之雅舟航程,漫步C++幽谷——链表分类探析与双链表之定义与构筑

“说好不哭”

2401_88325505的博客 2013

双链表的初始化,建立,插入,查找,删除

双链表的初始化,建立,插入,查找,删除

shopping.w 7969

【数据结构】【C/C++】链表基础知识,链表的结点定义、初始化、求长度、按序号取元素、按值查询元素、插入、删除、构造的算法实现,各种结构形式的链表(如双循环链表)

简单介绍了链表的结点定义、初始化、求长度、按序号取元素、按值查询元素、插入、删除、构造的算法实现。此外,介绍了几种其他形式的链表,如双循环链表的实现。

2301_80785232的博客 3240

算法开启小码农双链表血脉

文章目录==也欢迎大家能来到我们小伙伴的社区 [慧编程开源俱乐部](https://bbs.youkuaiyun.com/forums/mzt)==双链表双链表结构图双链表节点双链表初始化函数ListInit双链表尾插函数ListPushBack双链表打印函数ListPrint双链表尾删函数ListPopBack双链表头插函数ListPushFront获得双链表节点函数BuyListNode双链表头删函数ListPopFront双链表查找函数ListFind双链表插入函数ListInsert(pos之前插入因

diandengren的博客 2016

数据结构--双链表的c/c++实现(超详细注释/实验报告)

如果希望从表中快速确定某一个结点的前去,其中一个解决方法就是在单链表的每个结点再增加一个指向其前去的指针域prior。这样形成的链表中就有两条方向不同的链,称之为双向链表(Double Linked List)。

池塘春草梦的博客 3245

AcWing 827. 双链表(C++算法)

AcWing 827. 双链表 1、题目(来源于AcWing): 实现一个双链表,双链表初始为空,支持5种操作: (1) 在最左侧插入一个数; (2) 在最右侧插入一个数; (3) 将第k个插入的数删除; (4) 在第k个插入的数左侧插入一个数; (5) 在第k个插入的数右侧插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。 注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数

YSA__的博客 384

C C++最新【初阶数据结构与算法】第五篇:双链表_双链表初始化链表(1),2024年最新C C++程序员

🌏一、双链表概念🍤第一个结点属于多开辟的空间,为了方便头插头删,后续结点为真正的链表内容。🍤一个指向前面结点的指针🍤一个存储数据的空间🍤一个指向后面结点的指针🍤与链表不同的是,双链表结构更复杂,但其实实现起来比单链表简单,并且还有一个哨兵//此双链表带哨兵位//数据//下一个指针//上一个指针。

2401_84978655的博客 586

数据结构与算法——双链表

数据结构与算法——双链表 文章目录数据结构与算法——双链表学习思路双链表的基本结构双链表的基本操作定义双链表——C++版插入结点在某个结点后插入元素在某个结点前插入元素记忆方法在头部插入元素s在尾部插入元素s删除结点遍历元素求长度双链表的进阶操作输出销毁头插法建表尾插法建表删除第i个元素在第i个元素后插入值为value的元素 学习思路 与单链表一样,我还是建议用过掌握基础操作来拼凑成大的操作。 双链表的基本结构 单链表指针域只有一个next指针,指向下一个结点,这就导致了它只能从前往后访问。为了弥补这一缺陷

cuc_pyx技术小站 1090

c++ 双链表、双向循环的创建、删除、添加

/* 双链表 */ typedef struct _DoubleLinkList{ int val; struct _DoubleLinkList *pre; struct _DoubleLinkList *next; }DoubleLinkList; // 头插法初始换双链表 DoubleLinkList* Creat_DoubleLinkList_Head() { DoubleLi...

jyzeng1989的博客 1393
上一篇: 顺序表的定义、初始化、及插入、删除、查询操作,将算法转化成具体的代码
下一篇: 用单链表实现一元多项式相加 C++代码
hackerain
博客等级 码龄16年 753粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值