第4章 栈与队列-----栈

栈 (stack)是限定仅在表尾进行插入和删除操作的线性表。

 

允许插入和删除的一端称为栈顶(top),另一端为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。

栈的抽象数据类型

 

实例:StaticSize是5,则栈普通情况、空栈和栈满的情况示意图如图4-4-2所示

 

栈的顺序存储结构----进栈操作

栈的顺序存储结构---出栈操作

 栈的链式存储结构,简称链栈

 

栈的链式存储结构---进栈操作

栈的链式存储结构-----出栈操作

 

如果栈的使用过程中元素变化不可预料,有时很小,有时非常大,那么最好是用链栈,反而,如果它的变化在可控范围内,建议使用顺序栈会更好一些。

时间: 2024-10-11 17:40:04

第4章 栈与队列-----栈的相关文章

第三章:1.栈和队列 -- 栈的表示及实现

前言: 栈和队列 是两种重要的线性结构.从数据结构角度来看,栈和队列也是线性表,它的特殊性在于其操作是线性表的子集,是操作受限的线性表,因此可以称作限定性的数据结构. (限定性:如.人为的规定线性表只能从表尾插入和删除结点数据元素,那么这样的线性表就是栈) 目录: 1.栈 2.栈的应用举例 3.栈与递归的实现 4.队列 5.离散事件模型 正文: 栈的定义 栈(stack) 如上所说,就是限定只能在表尾进行插入和删除的线性表.表尾 称为 栈顶(top), 表头 称为 栈底 (bottom),没有数

数据结构-王道2017-第3章 栈和队列-栈和队列的应用

1.前中后缀表达式的转换: 举例说明将自然表达式转换成二叉树: a×(b+c)-d ① 根据表达式的优先级顺序,首先计算(b+c),形成二叉树 ②然后是a×(b+c),在写时注意左右的位置关系 ③最后在右边加上 -d 然后最这个构造好的二叉树进行遍历,三种遍历的顺序分别是这样的: ① 前序遍历:根-左-右 ② 中序遍历:左-根-右 ③ 后序遍历:左-右-根 前缀表达式:-*a+bcd 中缀表达式:a*b+c-d 后缀表达式:abc+*d- 2.队列在层次遍历二叉树中起作用,且在计算机系统中应用非

第三章:2.栈和队列 -- 栈的应用举例

前言: 本节为栈的应用举例,只包括代码实现部分 目录: 2.栈的应用举例 进制转换: 括号匹配: 正文: 进制转换实现代码: 注意:此函数要和上一节,栈的实现代码放在一起 //进制转换 void conversion(){ SqStack S; InitStack(S); int num; printf("%s","请输入一个十进制数:"); scanf("%d",&num); while(num){ Push(S,num%8); num

剑指offer-面试题9-用两个栈实现队列-栈和队列

/* 题目: 用两个栈实现一个队列.队列声明如下. */ /* 思路: 将值压入stack1,再从stack1弹出到stack2,则为先进先出. appendTail时直接压入stack1即可,当stack2没有可用于deleteHead的元素时,将stack1的元素全部压入stack2. */ template<typename T> class CQueue{ public: CQueue(void) ~CQueue(void); void appendTail(const T&

剑指offer-用两个栈实现队列-栈和队列-python

题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. # -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): # write code here self.stack1.append(node) return self.stack1 def pop(self): # return x

05 1 栈与队列 栈的实现与Stack类

1 /// <summary> 2 /// 自定义栈 3 /// </summary> 4 class CStack { 5 6 /// <summary> 7 /// 存储数据的数组 8 /// </summary> 9 private ArrayList m_arrayList; 10 /// <summary> 11 /// 栈顶索引 12 /// </summary> 13 private int m_top; 14 15 p

数据结构期末复习第三章栈和队列

第三章:栈和队列 栈的特性:后进先出(LIFO) 1.  输入序列为ABC,可以变为CBA时,经过的栈操作为( B )A. push, pop, push, pop, push, popB. push, push, push, pop, pop, popC. push, push, pop, pop, push, popD. push, pop, push, push, pop, pop 解析: ABC经过push,push,push操作后,从栈顶到栈底元素为CBA,经过pop,pop,pop出

剑指offer-第二章数据结构(数组,字符串,链表,树,栈与队列)及例题

一.数组(最简单的数据结构) 定义:占据一块连续内存并按照顺序存储数据.创建时先指定大小,分配内存. 优点:时间效率高.实现简单的hash(下标为key,对应的数据为value) 缺点:空间效率差.如果我们只在数组中存一个数字,也先分配所有的内存. 扩展:动态数组(解决空间效率差),手段:扩容后,复制内容到新的数组,释放之前的内存.时间性能变差,因此,要尽量减少改变数组容量的次数. 数组与指针:声明一个数组时,数组名字也是一个指针,指向数组的第一个元素. 例题:在一个二维数组中,每一行都按照从左

《大话数据结构》笔记(4-1)--栈与队列:栈

栈的Java实现代码: https://github.com/Lyu0709/data-structure/blob/master/src/com/coding/basic/stack/Stack.java 逆波兰算法实现: https://github.com/Lyu0709/data-structure/blob/master/src/com/coding/basic/stack/RPN.java 第四章  栈与队列 栈 定义 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(b