当前位置: 首页 > news >正文

数据结构---堆栈和列

一、堆栈

1.栈堆:具有一定操作约束的线性表;(只在一端做插入删除)

2.栈的顺序存储结构:

由一个一维数组和一个记录栈顶元素位置的变量组成。定义方式如下:

3.入栈操作:

注意:(1)top表示栈顶元素的下标,maxsize表示数组容量;

(2)要放入栈顶的上面,同时top加1;

4.出栈操作:

注意:(1)栈堆初始化时top为-1,即数组首元素之前的那个位置的下标;

5.一个数组实现两个堆栈:

堆栈初始化:

注意:top2代表数组最后一个元素之后位置的下标;

对两个堆栈的区别方法:引入标识tag:

出栈操作:(记得先检验是否为空)

6.堆栈的链式存储:

栈的链式存储结构实际上就是一个单链表,叫做链栈。插入和删除操作只能在链栈的栈顶进行。

(1)创建堆栈结构:

(2)创建堆栈:

(3)判断是否为空:

(4)入栈操作:

注意:最后才对s->next做处理;

(5)出栈操作:

注意:第一个赋值语句,是让firstcell指向s->next指向的位置,所以firstcell指向的是要删除的结点;

7.中缀转换为后缀:

8.堆栈的应用:

主要应用的是堆栈的特性:先来先用,后来后用;

二、队列

1.队列的顺序存储实现:

队列的顺序存储结构通常由一个一维数组和一个记录队列头元素的变量front以及一个记录队列尾元素位置的变量rear组成;

类比排队,队列元素的添加在尾,元素的删除在头;

队列结构创建:

具体位置表示:

2.顺环队列:

这样的位置排列会出现一个问题:

即无法知道队列是空的还是满的,相应的判断条件都是front=rear

解决办法:

(1)增加标记size,当增加元素时size+1,用来标识元素个数;

(2)仅仅使用n-1个数组空间,即少使用一个数组空间;

我们一般采用方法(2);

相应入队操作:

注意:其中的(ptrq->rear+1) % maxsize代表的是在顺环中,rear元素对应的下一个元素的位置下标;

出队操作:

记住:我们都是在头删除元素,在尾添加元素;

3.队列的链式存储结构:

结构创建:

注意:要额外创建一个结构体,一个存头部指针,一个存尾部指针;

结构图解:

出列操作:

这是一个不带头结点的队列,实际上,front指向的头结点一般为辅助结点(不是空节点),它不存储实际数据,只是为了方便后续插入、删除操作;

相关文章:

  • 77.HarmonyOS NEXT ImageViewerView 组件深度剖析: Swiper容器与懒加载深度解析
  • 智慧加油站小程序数据库设计文档
  • Redis 的应用场景
  • 提升HDFS存储和读取效率
  • Json实现深拷贝的缺点
  • 2.5 python接口编程
  • Java File 类详解
  • Wireshark 抓包全解析:从数据捕获到报文分析
  • 2024年12月CCF-GESP编程能力等级认证C++编程二级真题解析
  • 深入探索人工智能(AI):分类、应用与案例分析
  • 基于模态特定因子的高效低秩多模态融合方法解析
  • 基于Python的天气预报数据可视化分析系统-Flask+html
  • python从邮件中提取链接中的符号为什么会变成amp; 解决办法
  • 华为手机助手输入连接码时光标乱跳
  • 本地部署Spark集群
  • Markdig:强大的 .NET Markdown 解析器详解
  • 003_快乐数
  • Axios介绍(前端开发处理网络请求首选工具,基于Promise HTTP客户端,可以在浏览器和Node.js环境使用)(Axios库)
  • Java 综合实战项目:生成不重复随机字符串数组
  • 深度学习 Deep Learning 第2章 线性代数
  • 电子凭证会计数据标准推广至全国
  • 陈龙带你观察上海生物多样性,纪录片《我的城市邻居》明播出
  • 海南乐城管理局原局长贾宁已赴省政协工作,曾从河南跨省任职
  • 山东发布高温橙警:预计19日至21日局地可达40℃
  • 山东茌平民企巨头实控人省外再出手:斥资16亿拿下山西一宗探矿权
  • 发射后失联,印度地球观测卫星发射任务宣告失败