栈和队列基本概念,顺序栈的表示和实现
文章目录
- 栈
- 队列
- 顺序栈
- 顺序栈的存储结构
- 顺序栈的基本操作
- 初始化
- 入栈
- 出栈
- 取栈顶元素
栈
栈(stack)是限定仅在表尾进行插入或删除操作的线性表。其表尾称为栈顶(top),表头称为栈底(bottom)。不含元素的栈称为空栈。
假设栈S=(a1,a2,a3,…,an),a1则为栈底元素,an为栈顶元素,元素按a1,a2,a3,…,an的顺序进栈,按an,…,a3,a2,a1的顺序出栈,如上图所示,所以栈又称为后进先出的线性表。
队列
和栈相反,队列(queue)是一种先进先出的线性表。它只允许在表的一段进行插入,而在另一端删除元素。这和日常生活中的排队是一致的,最早进入队列的元素最先离开。在队列中,允许插入的一端称为队尾(rear),允许删除的一段称为队头(front)。
假设队列q=(a1,a2,a3,…,an),那么,a1就是队头元素,an就是队尾元素,队列的元素按照a1,a2,a3,…,an的顺序进入,再依次按照a1,a2,a3,…,an的顺序离开队列,只有前一个元素离开队列后当前元素才能离开队列,如上图所示。
顺序栈
顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶元素的数据元素,指针top指示栈顶元素所在顺序栈的位置,top=0时为空栈,当top和base的值相等时,栈为空栈。
顺序栈的存储结构
typedef struct {elemtype *base;//栈底指针elemtype *top;//栈顶指针int stacksize;//栈的最大容量
}sqstack;
顺序栈的基本操作
初始化
Status InitStack(sqstack &s){s.base=new elemtype[MAXSIZE];//为顺序栈分配一个MAXSIZE大的存储空间 if(!s.base) exit(ERROR);//存储分配失败 s.top=s.base;//top初始为base,空栈 s.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE return OK;
}
入栈
Status Push(sqstack &s,elemtype e){if(s.top-s.base==MAXSIZE) return ERROR;//栈满退出*s.top++=e; //元素e压入栈顶,栈顶指针加1return OK;
}
这里*s.top++=e;
相当于*s.top=e;s.top++;
出栈
Status Pop(sqstack &s,elemtype &e){if(s.top==s.base) return ERROR;//栈空退出e=*--s.top; //栈顶指针减1,将栈顶元素赋给e return OK;
}
top指针指向的位置为栈顶元素上方,所以先将top减1。
取栈顶元素
elemtype Gettop(sqstack s){if(s.top!=s.base)//判断栈非空 return *(s.top-1);//返回栈顶元素,栈顶指针不变
}
参考自《数据结构》严蔚敏版,学习专用。
栈和队列基本概念,顺序栈的表示和实现相关推荐
- 数据结构,堆和栈和队列的概念
数据结构,堆和栈和队列的概念 1 什么是数据结构 数据结构是计算机存储,组织数据的反复改.数据结构是指相互之间存在的一种或多种特定关系的数据元素集合. 2 数据结构的逻辑结构 1 集合结构,元素都是孤 ...
- 栈简介、手撸顺序栈、手撸链栈和栈的应用
一. 简介 1. 什么是栈? 栈是一种只能从表的一端存取数据且遵循 "先进后出"("后进先出") 原则的线性存储结构.栈也是用来存储逻辑关系为 "一对 ...
- 栈和队列的区别,栈和堆的区别
栈和队列的区别: 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 栈是先进后出,队列是先进先出. 栈只允许在表尾一端进行插入和删除,队列只允许在表尾一端进行插入,在表头一端进行删除 ...
- 栈和队列的区别,栈和堆得区别
栈和队列的区别: 1.栈是先进后出.队列是先进先出. 2.栈只允许在一端进行插入和删除,队列则在表的一段插入另一端删除. 3.在栈中遍历数据需要扫描全部数据,所以比较慢.而在队列中可以从两端进行所以速 ...
- 栈和队列的区别与栈和堆的区别
1.栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈只允许在表尾一端进行插入和删除,而队列只允许在表尾一端进行插入,在表头一端进行删 ...
- 栈的顺序存储结构(顺序栈)
栈的顺序存储结构 1.顺序栈的存储结构 #define MAXSIZE 100 //顺序栈存储空间的初始分配 typedef struct{SElemType *base; //栈底指针SElemTy ...
- 代码随想录【day 10 栈与队列】| 232.用栈实现队列、 225. 用队列实现栈
代码随想录[day 10 栈与队列]| 232.用栈实现队列. 225. 用队列实现栈 理论基础 LeetCode 232.用栈实现队列 题目链接:232.用栈实现队列 卡哥文解 视频讲解 解题思路( ...
- (王道408考研数据结构)第三章栈和队列-第一节:栈基本概念、顺序栈和链栈基本操作
文章目录 一:栈基本概念 (1)栈的定义 (2)压栈和出栈 (3)进栈出栈变化形式 (4)栈的操作 二:栈的顺序存储结构及其操作实现 (1)顺序栈的定义 (2)进栈 (3)出栈 (4)读取栈顶元素 ( ...
- C# 栈 、队列的概念
栈: 也是System.Collections下的数据结构 存储依然是Object类型的对象 Stack 名字 = new Stack(); Count:实际拥有的元素个数 栈的释放顺序是先进后出(后 ...
- 简单实现顺序表示的栈与队列的进栈出栈创空栈入队出队创空队等算法
栈和队列是两种最重要的数据结构,也是两种最典型的抽象数据类型,应用非常的广泛. 目录 一.栈 一.空栈的创建 二.进栈 三.出栈 二.队列 一.创建空队列 二.队列的入队和出队 三.取队列头元素 一. ...
最新文章
- 超链接浏览meta name=format-detection/ 的用法
- javaScript入门之常用事件
- 036_PageHeader页头
- python逐行读取txt写入新的txt_Python逐行读取txt文本,按符合分割词并逐行写入txt...
- Java实现List中某个对象属性中的字符串参数首字母进行排序
- 创建dynamics CRM client-side (四) - Namespace Notation in JS
- P3435 [POI2006]OKR-Periods of Words kmp + fail指针
- 规范化流程化提交自己代码到远程gitlab服务器
- 4_while循环结构和breakcontinue
- 数据-第15课-栈的应用实战一
- JavaScript深入之从原型到原型链 1
- 《Flash MX培训教程》前言
- Eyoucms易优小程序插件2.0版本上线
- 根据身份证号 计算具体年龄
- pr如何跳到关键帧_零基础自学剪辑第六天--效果控件与关键帧
- C++多线程03 Lambda表达式与caII once
- 《西游记》取经路线图|思维导图简单又漂亮
- HTML5+CSS3实战(二)——照片墙效果
- 中国第三方支付系统目前存在的问题
- notes邮箱备份邮件到本地