双向链表的基本操作

数据结构实验1.2—高精度计算PI值(西工大) 这是数据结构第二题的题目,是让我们根据用户的需求来计算派的值 这是题目的详细描述,刚看到这道题的时候,我是真的头大,完全没有思路,于是查找了一些大佬的笔记后才开始编写 这是我在写这些代码是所运用到的数学反三角函数幂次展开式的知识。 下面是正确的代码以及我的一些见解,和需要注意的一些地方。希望能对你有所帮助。如有更加精简的算法,请在评论区留下你的算法!!!谢谢!!! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdl 阅读详情

双向链表的基本操作

定义一个双向链表,必须有一个头结点,一般用head表示。

定义head,其成员指针都指向自身。同时可以通过这个特性来判断链表是否为空,即仅有head,无其他结点存在。

双向链表结构体:
struct list_head {
struct list_head *next, *prev;
};
#define LIST_HEAD_INIT(name) { &(name), &(name) }
#define LIST_HEAD(name)
struct list_head name = LIST_HEAD_INIT(name)
通过LIST_HEAD(name)来定义和初始化双向链表。

//判断链表是否为空
//next指针指向自身则为空
static inline int list_empty(const struct list_head *head)
{
return head->next == head;
}
//向双向链表中添加一个节点
//前一个节点的next指向new
//后一个节点的prev指向new
//new的prev指向前一个节点
//new的next指向后一个节点
//即将前后两个结点拼接起来
static inline void __list_add(struct list_head *_new,
struct list_head *prev,
struct list_head *next)
{
next->prev = _new;
_new->next = next;
_new->prev = prev;
prev->next = _new;
}

//将节点添加到尾巴端
//尾巴处最后一个节点为head
//new在head之前
static inline void list_add_tail(struct list_head *_new, struct list_head *head)
{
__list_add(_new, head->prev, head);
}

//删除一个节点
//参数为前一个节点和后一个节点
//将前节点的next指针指向后节点
//将后节点的prev指针指向前节点
static inline void __list_del(struct list_head *prev, struct list_head *next)
{
next->prev = prev;//后一个节点的prev指向前一个节点
prev->next = next;//前一个节点的next指向后一个节点
}

//删除一个entry,即删除一个条目
static inline void __list_del_entry(struct list_head *entry)
{
__list_del(entry->prev, entry->next);
}

//删除节点,将节点指针指向自身
static inline void list_del(struct list_head *entry) //修改过的list_del,这里与list_del_init一样
{
__list_del(entry->prev, entry->next);
entry->next = entry;
entry->prev = entry;
}

//初始化一个list,指针指向自身
static inline void INIT_LIST_HEAD(struct list_head *list)
{
list->next = list;
list->prev = list;
}

//删除并将指针指向自身
static inline void list_del_init(struct list_head *entry)
{
__list_del_entry(entry);//从链表中删除
INIT_LIST_HEAD(entry);//被删除的节点指针指向自身
}

//删除节点
//将节点移动到尾巴端
static inline void list_move_tail(struct list_head *list, struct list_head *head)
{
__list_del(list->prev, list->next);
list_add_tail(list, head);
}

//添加新结点
static inline void list_add(struct list_head *new, struct list_head *head)
{
__list_add(new, head, head->next);
}

//判断member是否等于head
static inline int list_is_head(struct list_head *head, struct list_head *member)
{
return head->next == member;
}

双向链表的定义及基本操作 《匠人的算法课II》为数据结构和算法系列课程的进阶课程。本讲为第一讲,大家详细介绍双向链表的定义以及基本操作。 阅读详情

相关推荐

双向链表基本操作(C语言)

#include <stdio.h> #include <stdlib.h> #include<stdbool.h> //双向链表 typedef int Elemtype; typedef struct DNode { Elemtype data; struct DNode *prior,*next; } DNode,*DLinkList; //尾插法创建链表 DLinkList CreateList() { int x; DLin

weixin_46503238的博客 3430

数据结构 双向链表及其基本操作

双向链表的一系列操作讲解及代码

Mi-ronin的博客 8062

【头歌】双向链表的基本操作

在双链表中p结点之后插入s结点的操作步骤如下: ① 将结点s的next域指向结点p的下一个结点: s->next=p->next;在双链表中删除p结点(其前驱结点为pre)的操作:   ① 若p不是尾结点,则将其后继结点的prior域指向pre结点: p->next->prior=pre ② 将pre结点的next域改为指向p结点的后继结点: pre->next=p->next。在带头结点的双向链表中,通常头结点的数据域可以不存储任何信息,尾结点的next域置为NULL。

qq_39977056的博客 2248

数据结构—双向链表的基本操作

1.双向链表的操作 双向链表的基本操作包括:判断链表是否为空、计算链表的长度、遍历链表,这3中操作的方法和单链表一样,主要和双向链表中的指向后继的指针有关。 双向链表的插入和删除操作和单链表是有区别的:双向链表的插入和删除操作要修改指向前驱和指向后继的指针。 2.双向链表的删除:删除指定位置 i 的元素 1.判断输入的删除的位置是否合法,1<=i<=表长 2.顺着指向后继的指针...

小虾米编程 8204

librealsense2 camera.so: undefined symbol:ZN2cV3MatC1EV解决笔记记录

先参考的这个兄弟的办法虽然没解决但是提供了大方向感谢; realsenseD400系列相机报错:undefined symbol: _ZN2cv3MatC1EiiiRKNS_7Scalar_IdEE解决方案 后解决办法参考 No GPU usage on jetson xavier NX · Issue #2326 · IntelRealSense/realsense-ros · GitHubOpenCV_DIR" to a directory containing one of the above f

梁俊星的博客 3516

来!简单了解一下计算机发展史!

​ 1936年,英国数学家阿兰・麦席森・图灵提出了一种抽象的计算模型——图灵机( Turing machine)。图灵机,又称图灵计算机,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人类进行数学运算。​ 图灵机是一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。

m0_57290404的博客 2907

【数据结构-C】双向循环链表基本操作及图解分析

目录 ????双向链表介绍 ????双向链表的基本操作及图解分析 ????1.双向链表创建新的结点 ????2.双向链表初始化 ????3.双向链表的尾插 ????4.双向链表的头插 ????5.双向链表的头删 ????6.双向链表的尾删 ????7.查找某个结点并返回该节点地址 ????8.在某结点前插入一个新的结点 ????9.删除某个结点 ????10.销毁双向链表 总结 ????双向链表介绍 双向链表的结点:指针域1+数据域+指针域2 ????指针域1:指向该结点

qq_52763385的博客 4882

cesium 高程数据使用

cesium 高程数据使用高程数据下载高程数据切片简单数据服务 高程数据下载 使用地理空间数据云平台免费提供的高程数据。地理空间云平台 点击列表中的下载得到数据压缩包。例如:ASTGTM2_N22E114.zip 高程数据切片 使用cesium实验室工具对下载得到的压缩包进行切片。cesium实验室 切片得到的文件夹目录。 简单数据服务 使用nodejs的koa启动简单的资源服务。koajs 项目根目录新建data文件夹,在新建dem文件夹放高程数据。 注意目录自行更换,这里是./data/dem

哎哟这个凉白白的博客 1812

双向链表基本操作

#include #include //以下双向链表均带有头节点;头节点不存放数据,只起到带头作用。typedef struct DLNode{ int data; struct DLNode *prior; struct DLNode *next;}DLinkNode;//双向链表的建立(正插入法)DLinkNode * CreatDList(DLinkNode *DL,int n){ DL=(

Simple is beautiful 2087

图像去雨:超详细手把手写 pytorch 实现代码(带注释)

占个坑,过几天来写

书山有路,学海无涯! 1万+

小米万兆路由器里的Docker安装可道云(Kodexplorer)私有网盘

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装[可道云](http://kodcloud.com/)(Kodexplorer)私有网盘。

engchina的专栏 1万+

利用C++实现双向链表的基本操作

本文采用利用C++实现了对双向链表的基本操作。操作包括:双向链表的构建、链表指定位置的插入、链表指定位置的删除、链表长度的获取、链表指定位置元素的获得及指定元素位置的获得、整体链表的删除。

weixin_43165699的博客 4336

Mac 安装neo4j(解压版)最新版本教程

本文介绍了在Mac M系列操作系统上安装Neo4j图数据库的具体步骤。内容包括:从官网下载解压版Neo4j社区版压缩包;通过终端命令将其解压到/opt目录并重命名;配置环境变量以便全局访问;以及常用命令如启动/停止服务、重置密码等。安装完成后,用户可通过浏览器访问http://localhost:7474,使用默认账号neo4j/neo4j登录并根据提示重置密码。该教程简洁明了地指导用户完成Neo4j在Mac上的安装配置过程。

猿小白的博客 910

双向链表基本操作代码

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ⚝ 学习不入神,子枫嫁别人 ⚝ Author: ChenFeng Time: 2020年07月17日 08:14:19 Describe $Used to do something$ ⚝ 认真小阿晨,子枫娶进门 ⚝ * * * * * * * * * * * .

urbeen的博客 666

卷积神经网络中的自注意力机制(Self-Attention Mechanism)

卷积神经网络中的机制表现为操作,其实现过程与Seq2Seq模型的自注意力机制类似。标准的卷积层是一种局部滤波操作,其输出特征上的任意位置是由对应输入特征的一个邻域构造的,只能捕捉局部特征之间的关系。而自注意力机制通过计算任意两个位置之间的关系直接捕捉远程依赖,而不用局限于相邻点,相当于构造了一个的卷积核,从而可以捕捉更多信息。在卷积网络的自注意力机制中,首先构造输入特征x的键特征fx, 查询特征gx和值特征hx;

AI天才研究院 1501

这20个网络工程项目经验,帮我跳槽加薪不止一次

嘿,大家好,我是圈圈,一个在网络工程圈子里混了十多年的老鸟。从国企的网管起步,到现在给大厂做顾问,我见过太多简历:有的光鲜亮丽,证书一堆,但一聊项目,就露怯;有的简历朴实,但列出的项目经验让人眼前一亮,直接拿offer。为什么?因为招聘官最看重实战。理论谁都会背,项目经验才是你的“硬通货”。尤其在网络工程这行,项目不光证明你的技能,还展示你解决问题的能力。今天,我就分享20个我亲身经历或见过的网络工程项目经验。每个都值得写进简历,不是吹牛,这些项目帮我跳槽加薪不止一次。

网络技术联盟站 432
上一篇: list_offsetof的简单理解
下一篇: 设备管理器说明2
freedomAfish
博客等级 码龄15年 19粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值