/*******************************************
双链表操作:list_serach list_insert list_delete
相关伪代码:
//在链表L中查找具有关键字k的元素x
list_search(L,k)
x=head[L]
while x != NIL and key[x]!=k
do x <—— next[x]
return x
//将设置了关键字的新元素x插入链表
list_insert(L,x)
next[x] <—— head[L]
if head[L] != NIL
then prev[head[L]] <—— x
head[L] <—— x
pre[x] <—— NIL
//从链表中删除元素x
list_delete(L,x)
if pre[x] != NIL
then next[prev[x]] <—— next[x]
else head[L] <—— next[x]
if next[x] != NIL
then prev[next[x]] <—— prev[x]
*******************************************/
#include <stdio.h>
#include <stdlib.h>
struct node{
struct node *prev;
struct node *next;
int data;
};
//搜索节点的值为k的节点
struct node* list_search(struct node *L,int k)
{
struct node *rval=L;
while(rval!=NULL && rval->data!=k)
rval=rval->next;
return rval;
}
//在链表头部插入节点x,注意传入的参数是指针的指针**L
void list_insert(struct node **L,struct node *x)
{
x->next=*L;
if((*L)!=NULL)
(*L)->prev=x;
(*L)=x;
x->prev=NULL;
}
//删除x节点
int list_delete(struct node *L,struct node *x)
{
struct node *tmp=L;
for(;tmp!=NULL;tmp=tmp->next){
if(tmp==x){
if(x->prev != NULL)
x->prev->next=x->next;
else
(L)=x->next;
if(x->next != NULL)
x->next->prev=x->prev;
return 0;
}
}
return -1;//代表没有找到节点x
}
//创建一个双链表
struct node * init_list()
{
struct node *L=(struct node*)malloc(sizeof(struct node));
return L;
}
//释放链表资源
void finit_list(struct node *L)
{
if(L==NULL)
return;
struct node *p=L->next;
struct node *tmp;
while(p!=NULL){
tmp=p;
p=p->next;
free(tmp);
}
if(L) free(L);
}
int main()
{
struct node *list=init_list();
if(list==NULL)
return 1;
list->data=1024;
int i;
struct node *tmp;
for(i=0;i<5;++i){
tmp=(struct node*)malloc(sizeof(struct node));
if(tmp!=NULL){
tmp->data=i;
list_insert(&list,tmp);
}
}
for(tmp=list;tmp!=NULL;tmp=tmp->next)
printf("%d ",tmp->data);
list_delete(list,list_search(list,3));
for(tmp=list;tmp!=NULL;tmp=tmp->next)
printf("%d ",tmp->data);
//释放链表资源
finit_list(list);
}
相关推荐
HFSS15 win10_64位破解
HFSS15 win10_64位破解 找到的别人的软件,但在首次安装时失败了,并不能patched。寻找了几种方法,已成功安装。在此写下安装经验,供大家参考。 软件安装包以及破解软件: 链接:https://pan.baidu.com/s/1MMjV_31maU5QD6fmI4zfIA 提取码:yj4q 在安装之前,建议关闭杀毒软件。 Step1:进入HFSS150Win64安装包,点击au...
九、双链表
头文件: typedef int Elemtype;//链表的头节点的pre指向尾节点,尾节点的next指向头节点 //如果只有一个头节点,则让头节点的next和pre都指向本身 typedef struct DuLinkNode { struct DuLinkNode* prev; struct DuLinkNode* next; Elemtype data; }DuLinkNode,*PDuLinkNode; typedef struct DuLinkList { PDuLinkNode he.
3D视觉引导技术在机器人焊接中的应用
通过对比传统的2D视觉和3D视觉技术在焊接领域的应用差异,探讨了3D视觉引导技术在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势。本文对3D视觉引导技术在机器人焊接中的应用进行了深入探讨,总结了其在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势,并通过应用案例展示了其在焊接路径规划、焊缝检测和焊接质量控制等方面的重要作用。1. 提高焊接精度:3D视觉引导技术能够精确测量焊接工件的三维形状和位置,为机器人提供精准的焊接路径规划和跟踪,从而提高焊接精度。三、3D视觉引导技术概述。
自己的底层代码库(九)——插入式的双链表
之前发过一个 非插入式的 这里之所以再发一个插入式的,是为了后面实现一个迭代器准备的 将迭代器注册给容器的时候,容器里面单独用了这样一个双链表来管理所有在该容器上注册的迭代器 又因为双链表本身就是容器的一种,出现了容器里面有容器的情况 又不想用指针,指针意味着需要另行分配内存 所以另外再实现了一个双链表,只用来管理容器上所有注册的迭代器 至于链表的插入删除这种操作,跟之
Proxmox VE网络配置踩坑实录:从Web界面无法访问到完美修复的全过程
本文详细记录了Proxmox VE服务器Web界面无法访问的完整排查与修复过程。作者从基础网络连通性测试入手,逐步排查了服务状态、SSL证书、端口监听、防火墙规则及网关配置,最终定位并解决了问题。文章提供了系统性的故障排查思路和实用的修复命令,对管理Proxmox VE网络具有重要参考价值。
基于人脸识别的智能门禁系统设计
在当前的技术背景下,本文精心打造了一款前沿的视频识别门禁控制系统。在进行调试的时候使用的软件是Keil,编写完代码,生成文件后用下载器下载到单片机上,就能够进行程序的调试了,本次设计实现了预先设定的目标,达到了预期的效果。本次设计的人脸识别的门禁控制系统其硬件部分是以STM32F103C8T6为核心的单片机,采用0V2640摄像头对人员的人脸识别,采用矩阵按键对系统的操作以及密码的输入,使用蜂鸣器来作为报警模块,开门装置是电子锁控制,显示设备采用OLED液晶显示,无线模块在一番思索后选择了蓝牙模块传输。
C/C++学习(九)循环双链表的操作之创建,插入、删除
双向链表 循环单链表的出现,虽然能够实现从任一结点出发沿着链能找到其前驱结点,但时间耗费是O(n)。如果希望从表中快速确定某一个结点的前驱,另一个解决方法就是在单链表的每个结点里再增加一个指向其前驱的指针域prior。这样形成的链表中就有两条方向不同的链,我们可称之为双(向)链表(Double Linked List)。双链表的结构定义如下: //建立一个线性双向链表的存储结构
【DIY】使用STM32及PID算法实现一个磁悬浮玩具
今天教大家来做一个磁悬浮玩具。
双链表——AcWing.827双链表
双链表是链表的一种,它的每个节点有两个指针,一个指向前一个节点,一个指向后一个节点。这样使得链表可以双向遍历。
Ubuntu升级遇到grub-efi-amd64-signed报错?3步搞定这个烦人的EFI目录问题
本文详细解析了Ubuntu系统升级时遇到的“grub-efi-amd64-signed”报错及“cannot find EFI directory”问题。通过剖析UEFI启动机制与EFI系统分区原理,提供了从诊断到修复的三步解决方案,帮助用户快速解决因EFI目录未挂载导致的升级中断,确保系统引导正常。
从零到一:STM32 CubeMX与WS2812B的DMA驱动艺术
本文详细介绍了如何使用STM32 CubeMX和DMA技术驱动WS2812B RGB LED灯条,从硬件设计到软件实现的全过程。通过CubeMX配置定时器和DMA,实现高效的PWM波形生成与数据传输,解决传统GPIO控制资源占用高的问题。文章还提供了颜色编码、动画效果实现及常见问题解决方案,助力开发者快速掌握智能LED控制技术。
数据结构-双链表(图解)
双链表是一种常用且重要的线性数据结构,它在计算机科学和软件工程中扮演着不可或缺的角色。相较于单链表,双链表的每个节点包含两个指针,分别指向其前驱节点(previous node)和后继节点(next node),这一特性使得双链表在数据操作上具有更高的灵活性。
uniapp [微信小程序] - 实现语音播报功能+实时收款播报,使用同声传译插件做文字转语音播报类似微信/支付宝收款播报小程序语音识别和朗读,手机提醒播放自定义收款语音信息(音频+收款金额+文案)
uniapp-实现语音播报功能,实时收款播报,uni-app/vue 文字转语音朗读(附小程序语音识别和朗读)uniapp小程序使用文字转语音播报类似支付宝收款播报小程序语音识别和朗读)IOS苹果手机播报没有声音,生成语音并播放,微信小程序接入官方wechatSi(微信同声传译)uniapp小程序使用文字转语音播报类似支付宝收款播报,uni-app 小程序端实现文字语音播报,uniAPP文本转语音,uniapp 文字转语音文字播报,手机静音播放没声音,收款方提示音 文字转语音朗读 同声传译,uniapp小程
双链表——双链表的定义及其基本操作(初始化、头插法尾插法建表、插入、查找、删除等)
双链表的结点中有两个指针prior和next,分别指向前驱结点和后继结点。//数据域//前驱指针//后驱指针单链表中的每个节点包含一个数据元素和一个指向下一个节点的指针。单链表只能从头结点开始依次遍历到尾节点,不能直接访问前一个节点。删除节点时,需要找到待删除节点的前一个节点,进行指针调整。插入节点时,只需要调整指针即可。单链表相对于双链表占用的内存空间更小。双链表中的每个节点包含一个数据元素,一个指向前一个节点的指针和一个指向下一个节点的指针。
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
双链表排序_双链表
双链表排序 双链表 (Doubly Linked List) Doubly linked list is a type of linked list in which each node apart from storing its data has two links. The first link points to the previous node in the list and the...
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
【C语言】双链表
在数据结构中,链表是一种线性数据结构,其中元素不是在内存中连续存储的,而是通过指针链接在一起。,如果对上述有注释的代码还存在疑惑,不妨画一画图,会极大方便我们进行理解!然而,这种额外的功能也带来了更高的存储开销,因为每个节点都需要额外的指针来保存前驱节点的信息。在这篇文章中,我们介绍了双链表的基本概念,并展示了如何使用C语言来创建和操作双链表。虽然双链表的结构相比单链表更复杂了,但正是由于双链表很“对称”,有规律,所以实现起来更方便了。当你看到这里的时候就会发现:双链表代码比单链表的代码会短很多,而且。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
数据结构与算法——双链表题解
数据结构与算法——双链表题解 由于作业只要求前四个题,且最后一道题的测试样例可能有点问题,所以我先写一下前四道题的题解 btw. 我做题解的时候,除了给出题目链接外,还会把题抄一遍,主要目的当然是凑字数 是csdn的代码块可以直接复制,这样便于你在自己电脑上写代码的时候复制样例进行测试。再加上为了确保题解能Accepted,我都会自己提交一遍,所以大家: 千万千万不要直接复制粘贴提交一套带走,因为这样不仅没什么收获,还会被老师带走。 不要生看,建议在电脑上看,一边看一边抄一遍,哪里不懂自己运行一下就懂啦!
python双链表
Python的双链表是一种数据结构,它由一个节点组成,每个节点包含两个指针,一个指向前一个节点,一个指向后一个节点。这使得在双链表中,可以从任何一个节点开始遍历整个链表,也可以在任何一个节点处插入或删除节点。双链表的优点是可以在链表中任意位置插入或删除节点,而不需要像单链表那样需要遍历整个链表。双链表的缺点是相对于单链表,每个节点需要额外的存储一个指向前一个节点的指针,占用更多的存储空间。
双链表————详讲
上一篇文章,我们简单了解了顺序表和单链表;单链表在插入数据时,我们处理前后关系时非常复杂,我们无法通过一个节点找到上一个节点位置,而本篇文章所说的双链表将可以解决这一问题。双链表只是结构复杂,然后我们在查找,插入链接都非常简单,只需要把结构搭建起来就可以了。
数据结构————双链表
双链表,顾名思义,是一种链式存储结构,其中每个节点不仅包含数据元素,还包含两个指针,分别指向其前驱和后继节点。为什么引入双链表?单链表的结点中只有一个指向其后继的指针,使得单链表要访问某个结点的前驱结点时,只能从头开始遍历,访问后驱结点的复杂度为O(1),访问前驱结点的复杂度为O(n)。为了克服上述缺点,引入了双链表。头插法指的是在双链表的头部插入节点,特点但链表元素的顺序与插入顺序相反,如果需要保持原有顺序,需要在插入后进行反转//头插法建立双链表//待插入结点//(1)创建头结点。
数据结构——双链表
介绍了双链表
数据结构学习笔记——链式表示中的双链表及循环单/双链表
循环单链表可以实现从任一个结点访问链表中的任何结点(遍历整个链表。循环双链表基于双链表,头结点L的prior域指向表尾结点,查找表头结点和表尾结点的时间复杂度均为O(1),查找一个结点的前驱结点时的时间复杂度也为O(1)。 - 由于双链表可以很快地找到前驱结点,所以双链表的插入、删除操作的时间复杂度都为`O(1)`。 双链表的插入操作可以概括为【`先连后,后连前`】,若在指针 *p 指向的结点之后插入结点 *q,首先,新结点q与原本 *p的指针域相连,即下一个结点,然后将结点q插入到结点p之后,再将其pr
图解双链表
图解数据结构 第一章 单链表 第二章 双链表 文章目录图解数据结构双链表&&循环双链表一、双链表基本操作1.创建结构体2.头插法创建双链表2.尾插法创建双链表3.追加双链表元素4.插入节点5.删除元素6.清空列表7.查找元素二、循环双链表的创建1.头插法创建循环双向链表2.尾插法创建循环双向链表总结 双链表&&循环双链表 由上一张内容可知,我们知道了单链表是怎么样构成的,下面我们详细探究双链表是怎么样子的。我们单链表无论是头插法,还是尾插法,它都是由头结点开始才可以确定所
2.9.双链表
三.双链表的插入: 图解: 此时要p结点之后插入s结点,起初p->next指向y,先把p的下一个结点即y和要插入的结点即s的指向下一个结点的指针对接即s->next = p->next:之后还需要把p结点的后继结点即p->next的前向指针p->next->prior指向s即p->next->prior = s:再把要插入的结点即s结点的前驱指针指向p结点即 s->prior = p:最后把p结点的后继结点指向s即p->next = s:但对于上述代码,有一个bug,当p结点是最后一个结点时,p->ne
双链表详解
在前面的文章中,我们已经学习了单链表,但是对于单链表有一个很大的问题就是,单链表只能找到后继结点,无法返回找到前驱。那么这一片文章中双链表就能很好的解决这个问题。双链表就是在单链表的基础上增加了前驱指针 双链表的初始化 如上述代码初始化后形成的头节点如下图:判断链表是否为空,判断头结点后继指针是否为NULL 双链表的插入 双链表插入新结点步骤: 上面为什么要判断呢?因为如果我们是在链表的尾部插入结点的话,那么链表的最后一个元素的后继指针指向的是NULL(没有后继结点)那么就不存在后继指针的结点的前驱指针。
4万+



被折叠的 条评论
为什么被折叠?



