《大话数据结构》--- 第四章 栈与队列

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

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

栈的插入操作,叫做进栈,也称压栈、入栈。

栈的删除操作,叫做出栈,也称弹栈。

当两个栈一个占用内存可能太大 但内容较少 另一个占用内存可能有剩余 可以考虑使用一个数组来存两个栈,一个底端从下标0开始,另一个底端从下标n-1开始,只要两个栈不碰头 就可以实现空间的有效利用。

栈的链式存储结构称为栈链。

如果栈的使用过程中元素变化不可预料,有时很小,有时很大,那么最好用链栈,繁殖,如果变化可控,可以使用顺序栈。

C#中自带了Stack类,封装了一些方法,比如push和pop 压栈和弹栈。

我们把一个直接调用自己或通过一系列的调用语句间接的调用自己的函数,称作递归函数。

每个递归定义必须有一个出口,满足时递归不再进行,即不再引用自身而是返回至退出。

不带括号的后缀表达法,又称逆波兰。所有的运算符号都在运算数字后面出现。可利用栈实现。

例 931-3*+102/+     后缀表达式。可以把每一个符号理解为一个括号。  为 9+(3-1)*3+10/2

标准的四则表达式称为标准运算四则表达式中缀表达式。

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

队列是一种先进先出的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。

当队头等于队尾,为空队列。

为了解决假溢出,采用头尾相接的数据结构即循环队列。

满队列的条件为队头加上队列数据的个数等于队尾。

队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,称为链队列。

从空间上来说,循环队列必须有一个固定的长度,所以就有了存储元素个数和空间浪费的问题。而链队列需要开辟一块指针域,却不会有太大影响。

时间: 2024-12-07 22:16:38

《大话数据结构》--- 第四章 栈与队列的相关文章

Java数据结构与算法(第四章栈和队列)

本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构(链表.树等等)一样,都适用于数据应用中作数据记录. 然而,本章要讲解的是数据结构和算法更多的是作为程序员的工具来运用.它们组要作为构思算法的辅助工具,而不是完全的数据存储工具.这些数据结构的生命周期比那些数据库类型的结构要短的多.在程序操作执行期间它们才被创建,通常它们去执行某项特殊的任务,当完成之后,它们就被销毁. 受限访问 在数组中,只要知道下标就可以访问数据项.或顺

第四章 栈与队列

一.栈的定义 栈(stack)是限定尽在表尾进行插入和删除操作的线性表. 我们把允许插入和删除的一端成为栈顶(top),另一端成为栈底(bottom),不含任何数据元素的栈称为空栈.栈又称为后进先出(LIFO)的线性表. 图示出栈入栈操作: 二.栈的抽象数据类型 图示栈的各项操作: 由于栈本身就是一个线性表,那么上一章我们讨论了线性表的顺序存储和链式存储,对于栈来说也是同样适用的. 三.栈的顺序存储结构及实现 来看一下栈的结构定义: 若存储栈的长度为StackSize,则栈顶位置top必须小于S

C语言数据结构——第三章 栈和队列

三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性的数据结构. 从数据类型的角度看,它们是和线性表大不相同的两种重要的抽象数据类型,在面向对象的程序设计中,它们是多型数据类型. 3.1-栈 3.1.1-抽象数据类型栈的定义 栈:是限定仅在表尾进行插入或删除操作的线性表,又可以称为后进先出的线性表. 栈顶:栈的表尾端 栈底:栈的表头端 空栈:不含元素

简单数据结构(四)栈和队列的简单应用

     编程判断一个字符串是否是回文.回文是指一个字符序列以中间字符为基准两边字符完全相同,如字符序列" ACBDEDBCA"是回文.      算法思想:判断一个字符序列是否是回文,就是把第一个字符与最后一个字符相比较,第二个字符与倒数第二个字符比较,依次类推,第 i 个字符与第 n-i个字符比较.如果每次比较都相等,则为回文,如果某次比较不相等,就不是回文.因此,可以把字符序列分别入队列和栈,然后逐个出队列和出栈并比较出队列的字符和出栈的字符是否相等,若全部相等则该字符序列就是回

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

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

第四章 栈与队列2 (对列)

4.2 队列 4.2.1 队列的定义 队列简称队,它通栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除.在队列中把插入数据元素的一端称为队尾(rear),删除元素的一端称为队首(front).向队尾插入元素称为进队或入队.从队列中删除元素称为离队或出队. 队列是先进先出表(First In First Out,FIFO). 队列的接口Queue: 1 package com.datastructure.chapter04.interfaces; 2 3

第四章 栈与队列(a)栈接口与实现

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/10265879.html

第04章 栈和队列

栈 队列 优先级队列 本章涉及到的三种存储数据类型:栈 队列 优先级队列 本章涉及到的存储数据类型是算法构思的辅助工具,而不仅仅是存储数据的工具.数据结构的生命周期比较短,在程序结束时,对应的数据结构的生命周期随之结束. 栈 队列 优先级队列是比较抽象的数据结构,通过接口对三种数据结构进行定义和实现,而实现的过程对用户来说是屏蔽的. 栈 (后进先出) 栈只允许访问一个数据项,即最后插入的项,当最后一项被移除时,才能对倒数第二项进行操作,依次类推. 栈的操作有两种,入栈和出栈,push  pop.

Java数据结构和算法之栈与队列

二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表. 栈的修改是按后进先出的原则进行. 每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除. 图1 [示例]元素是以a1,a2,-,a