全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C语言 表、栈和队列详解及实例代码

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小时内与您取得联系。