第九课:循环链表与双向链表
Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e){
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
e=p->data;
p->prior->next=p->next;
p->next->prior=p->pror;
free(p);
return OK;
}//ListDelete_DuL
|
Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e){
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
if(!(s=(DuLinkList)malloc(sizeof(DuLNode)))) return ERROR;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}//ListInsert_DuL
|
typedef struct LNode{
ElemType data;
struct LNode *next;
}*Link,*Position;
typedef struct{
Link head,tail;
int len;
}LinkList;
Status MakeNode(Link &p,ElemType e);
//分配由p指向的值为e的结点,并返回OK;若分配失败,则返回ERROR
void FreeNode(Link &p);
//释放p所指结点
Status InitLinst(LinkList &L);
//构造一个空的线性链表L
Status DestroyLinst(LinkList &L);
//销毁线性链表L,L不再存在
Status ClearList(LinkList &L);
//将线性链表L重置为空表,并释放原链表的结点空间
Status InsFirst(Link h,Link s);
//已知h指向线性链表的头结点,将s所指结点插入在第一个结点之前
Status DelFirst(Link h,Link &q);
//已知h指向线性链表的头结点,删除链表中的第一个结点并以q返回
Status Append(LinkList &L,Link s);
//将指针s所指(彼此以指针相链)的一串结点链接在线性链表L的最后一个结点
//之后,并改变链表L的尾指针指向新的尾结点
Status Remove(LinkList &L,Link &q);
//删除线性链表L中的尾结点并以q返回,改变链表L的尾指针指向新的尾结点
Status InsBefore(LinkList &L,Link &p,Link s);
//已知p指向线性链表L中的一个结点,将s所指结点插入在p所指结点之前,
//并修改指针p指向新插入的结点
Status InsAfter(LinkList &L,Link &p,Link s);
//已知p指向线性链表L中的一个结点,将s所指结点插入在p所指结点之后,
//并修改指针p指向新插入的结点
Status SetCurElem(Link &p,ElemType e);
//已知p指向线性链表中的一个结点,用e更新p所指结点中数据元素的值
ElemType GetCurElem(Link p);
//已知p指向线性链表中的一个结点,返回p所指结点中数据元素的值
Status ListEmpty(LinkList L);
//若线性链表L为空表,则返回TRUE,否则返回FALSE
int ListLength(LinkList L);
//返回线性链表L中的元素个数
Position GetHead(LinkList L);
//返回线性链表L中头结点的位置
Position GetLast(LinkList L);
//返回线性链表L中最后一个结点的位置
Position PriorPos(LinkList L,Link p);
//已知p指向线性链表L中的一个结点,返回p所指结点的直接前趋的值
//若无前趋,返回NULL
Position NextPos(LinkList L,Link p);
//已知p指向线性链表L中的一个结点,返回p所指结点的直接后继的值
//若无后继,返回NULL
Status LocatePos(LinkList L,int i,Link &p);
//返回p指示线性链表L中第i个结点的位置并返回OK,i值不合法时返回ERROR
Position LocateElem(LinkList L,ElemType e,
Status(*compare)(ElemType,ElemType));
//返回线性链表L中第1个与e满足函数compare()判定关系的元素的位置,
//若下存在这样的元素,则返回NULL
Status ListTraverse(LinkList L,Status(*visit)());
//依次对L的每个元素调用函数visit()。一旦visit()失败,则操作失败。
|
本文出自 51CTO.COM技术博客
转载于:https://blog.51cto.com/1539867/396246
第九课:循环链表与双向链表相关推荐
- C#之windows桌面软件第九课:汉字串口助手
C#之windows桌面软件第九课:汉字串口助手 using System; using System.Collections.Generic; using System.ComponentModel ...
- 数据结构——线性表:顺序表、单向链表、循环链表、双向链表
线性表 是一种数据结构:n个数据元素的有限序列 表示形式: L = (a1,a2...an) a1是线性表的元素,小写. n=0时候为空表 数据元素具有相同特性 相邻元素之间存在序偶关系:即有唯一 ...
- 投资学习网课笔记(part9)--基金第九课
学习笔记,仅供参考,有错必纠 文章目录 基金第九课 估值指标 市盈率 市净率 股息率 盈利收益率 PEG 基金第九课 估值指标 什么是估值指标 估值指标是衡量股票内在价值的指标,它可以用来判断股票的价 ...
- 综合日语第一册第九课
第九课 第一单元 复习 自动词:当主语做完动作后,被改变的是主语本身的状态,这个动词就叫自动词,即自动词改变的是自身的状态: 他动词:当主语做完动作后,被改变的是主语之外的事物的状况,那么这样的动词就 ...
- 榆树计算机课,吉林省榆树市弓棚镇武龙中学校七年级信息技术:第九课 Excel表格计算 教案+课件 (2份打包)...
ID:8701298 分类: 吉林 , 2018 资源大小:2626KB 资料简介: 课 题Word表格 课型新授课第 1 课时教材分析本节课内容是长春版<信息技术>第九课的内容,学习制作 ...
- 《幸福就在你身边》第九课、确信自己有好命【哈佛大学幸福课精华】
一.确信自己一定会走运 "只要相信自己,就会走运".世上无难事,只怕有心人.一个人能否成功,完全取决于他对自己信任的程度.只要找准了方向,充满信心地去努力,就没有实现不了的愿望.要 ...
- 基于QT实现的可视化链表(单链表、循环链表、双向链表)
1.1 题目 题号1:分别以单链表.循环链表.双向链表为例,实现线性表的建立.插入.删除.查找等基本操作. 要求:能够把建立.插入.删除等基本操作的过程随时显示输出来. 1.2 软件功能 功能分为三个 ...
- C语言之链表:单向链表,循环链表,双向链表
C语言之链表:单向链表,循环链表,双向链表 提起链式存储结构,其与数组是两个非常基础的数据结构,每当提到链式存储结构时,一般情况下我们都会将其与数组放到一块儿来比较. 对于数组与链表,从结构上来看,数 ...
- 【PHP MySQL】数据库专题 第九课 自连接
[PHP & MySQL]✔️数据库专题✔️ 第九课 自连接 概述 自连接 子查询 in 子查询 EXISTS 概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 自连接 自连 ...
最新文章
- Java中? extends T和? super T的理解
- 智源研究院发布“智能体系架构与芯片”重大研究方向,打造通用智能处理器,突破“算法共性特征”难题...
- CSS布局之品字布局
- 并发模型与IO模型梳理
- 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
- spring 源码-context
- 汇编语言(一)之反转字符串输出
- python情感分析预测模型_python snownlp情感分析简易demo
- android driver log,Android调试驱动抓log的方法
- 心形图案爱心代码编程c语言
- C++11之final详解
- 战争英雄、同性恋和计算机科学的奠基人
- fastposter v2.7.1 紧急发布 电商海报编辑器
- 刷脸支付行业代理的几个坑,你踩了吗?
- 【C语言】用1,2,3,4四个数字组成不相同并且没有相同数字的三位数
- NTC热敏电阻设计高精度温度计的方案1
- 在php中调用java的方法
- History 和 Hash 路由模式
- mybatis的parameterType可以不写(我一般都不写)
- hadoop集群web页面无法显示节点信息的解决方法