C语言 表、栈和队列详解

表ADT
形如A1,A2,A3…An的表,这个表的大小为n,而大小为0的表称为空表,非空表中,Ai+1后继Ai,Ai-1前驱Ai,表ADT的相关操有PrintList打印表中的元素;CreateEmpty创建一个空表;Find返回关键字首次出现的位置;Insert和Delete从表的某个位置插入和删除某个关键字。
对表的所有操作都可以通过使用数组来实现,但在这里使用链表的方式来实现。链表(linked list)由一系列不必在内存中相连的结构组成,每个结构均含有元素和指向包含该元素后继元的结构的指针。链表的结构有很多种,单向链表、双向链表、循环链表、有无表头的链表,这里以有表头结点的单向链表为例,其余几种的实现思路相同。
首先定义链表的结构:
struct Node
{
ElementType Element;
Node *Next;
};
表ADT的主要操作:
Node *CreateEmpty()
{
Node *header = new Node;
Header->Element = 0;
Header->Next = NULL;
return header;
}
void PrintList(Node *List)
{
Node *p = List->Next;
While (p)
{
std::cout << p->Element << “ “;
}
}
Node *Find(Node *List, ElementType X)
{
Node *p = List->Next;
while(p && p->Element != X)
{
p = p->Next;
}
return p;
}
void Insert(Node *List, ElementType X)
{
Node *p = List;
while(p->Next)
{
p = p->Next;
}
p->Next = new Node;
p = p->Next;
p->Next = NULL;
p->Element = X;
}
void Delete(Node *List, ElementType X)
{
Node *p = List->Next;
Node *d = p->Next;
while(d->Element != X)
{
p = p->Next;
d = p->Next;
}
p->Next = d->Next;
delete d;
}
以上是基本的几个操作,可以看到,操作中没有对链表是否为空进行检测,在删除操作中存在隐患。
栈ADT
栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。对栈的基本操作有Push(进栈)和Pop(出栈),前者相当于插入,后者相当于删除最后插入的元素。
栈的实现可以是指针,或者使用数组,数组的实现在笔者前面的已经介绍过了,今次使用单链表的方式实现。
首先,栈的结构定义:
struct Stack
{
ElementType Element;
Stack *Next;
};
栈ADT的主要操作:
Stack *CreateStack()
{
Stack *S = new Stack;
S->Next = NULL;
return S;
}
void Push(Stack *S, ElementType X)
{
Stack *p = new Stack;
p->Next = S;
S->Element = X;
S = p;
}
ElementType Pop(Stack *S)
{
Stack *p = S;
if(S->Next)
{
S = S->Next;
delete p;
}
return S->Element;
}
队列ADT
像栈一样,队列也是一种表,然而,使用队列时插入在一端进行而删除则在另一端进行。队列的基本操作时Enqueue(入队)和Dequeue(出队),入队是指在表的末端rear插入一个元素,而出队是删除(或者返回)在表的开头front的元素。
如同栈的情形一样,栈的实现可以用指针和数组的方式,数组的方式笔者同样在之前做过介绍,今次使用单链表的方式实现。
首先,定义队列的结构:
struct Queue
{
ElementType Element;
Queue *Next;
};
队列ADT的主要操作:
Queue *CreateQueue()
{
Queue *p = new Queue;
p->Next = NULL;
return p;
}
void Enqueue(Queue *rear, ElementType X)
{
Queue *p = new Queue;
p->Element = X;
rear->Next = p;
rear = p;
}
ElementType Dequeue(Queue *front)
{
Queue *p = front;
ElementType e = front->Element;
front = front->Next;
delete p;
return e;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# 表、栈和队列
# C语言
# 表与栈和队列实例代码
# C语言 浅谈栈与队列的定义与操作
# C语言数据结构进阶之栈和队列的实现
# C语言编程数据结构栈与队列的全面讲解示例教程
# C语言编程数据结构的栈和队列
# C语言中栈和队列实现表达式求值的实例
# C语言用栈和队列实现的回文检测功能示例
# 深入浅析C语言中堆栈和队列
# C语言超详细讲解栈与队列实现实例
# 链表
# 今次
# 来实现
# 为空
# 几个
# 过了
# 首次
# 是指
# 可以用
# 但在
# 可以通过
# 希望能
# 可以看到
# 做过
# 而出
# 几种
# 为例
# 在一
# 谢谢大家
# 则在
相关文章:
网站制作费用多少钱,一个网站的运营,需要哪些费用?
建站之星会员如何解锁更多建站功能?
如何在万网主机上快速搭建网站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
大连网站设计制作招聘信息,大连投诉网站有哪些?
建站主机服务器选购指南:轻量应用与VPS配置解析
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何快速配置高效服务器建站软件?
香港服务器租用费用高吗?如何避免常见误区?
如何快速生成专业多端适配建站电话?
专业网站建设制作报价,网页设计制作要考什么证?
如何快速搭建自助建站会员专属系统?
常州自助建站工具推荐:低成本搭建与模板选择技巧
网站制作说明怎么写,简述网页设计的流程并说明原因?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
用v-html解决Vue.js渲染中html标签不被解析的问题
建站主机是否属于云主机类型?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
佛山网站制作系统,佛山企业变更地址网上办理步骤?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何快速搭建二级域名独立网站?
清除minerd进程的简单方法
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
实惠建站价格推荐:2025年高性价比自助建站套餐解析
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
如何自定义建站之星模板颜色并下载新样式?
微信推文制作网站有哪些,怎么做微信推文,急?
定制建站哪家更专业可靠?推荐榜单揭晓
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
深圳网站制作的公司有哪些,dido官方网站?
建站之星如何快速生成多端适配网站?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何零基础在云服务器搭建WordPress站点?
微课制作网站有哪些,微课网怎么进?
如何快速上传自定义模板至建站之星?
网站制作软件有哪些,制图软件有哪些?
,怎么在广州志愿者网站注册?
广州商城建站系统开发成本与周期如何控制?
制作营销网站公司,淘特是干什么用的?
建站主机默认首页配置指南:核心功能与访问路径优化
Java解压缩zip - 解压缩多个文件或文件夹实例
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
html制作网站的步骤有哪些,iapp如何添加网页?
北京制作网站的公司,北京铁路集团官方网站?
如何在万网开始建站?分步指南解析
简单实现Android文件上传
Android使用GridView实现日历的简单功能
*请认真填写需求信息,我们会在24小时内与您取得联系。