【数据结构】回顾栈ADT和队ADT

1.简单的说,栈就是只在一个位置上进行插入和删除操作的表,而这个特殊的位置就是表的末端,但这却不被成为栈的末端,而是顶(Top)。

2.栈的基本操作时进栈和出栈,英文名分别是push和pop,分别相当于插入和删除。切记对空栈进行pop和top操作在栈ADT被认为是错误的,而如果push在空间之外进行操作也是有实现限制的,但这并不是ADT错误。

3.栈的特点是后进先出,对于学生来说可能用食堂里堆砌起来的餐盘做形容更加合适。

4.栈既可以用单向链表来实现,也可以用数组来实现。用单向链表自然是比较简单的,但用数组来实现的话,由于可以用vector的back、push_back 和 pop _back,因此也算是比较简单的。而且用数组的话,每个栈就会有一个theArray和topOfStack,对于空栈这topOfStack为-1,如果要添加一个元素x,则topOfStack加1,并且theArray[topOfStack]=x。如果要删除一个元素x,那么pop函数的返回值就是theArray[topOfStack],还要记得将topOfStack减1。

5.以上的操作都运行得飞快,而且如果是有自增和自减寻址功能的寄存器,那么对整数的push和pop操作都可以写成一条机器指令哦。

6.所存储的信息被称为活动记录,或称为栈帧。

7.关于递归,有兴趣的话可以看看这一篇,极有可能会扩充你的知识面。

传送门:【Scheme归纳】3 比较do, let, loop

8.队列和栈类似,基本上有2个操作:入队(enqueue),在表的末端(队尾)插入一个元素;出队(dequeue),删除并返回表的头部(队头)的元素。




感谢您的访问,希望对您有所帮助。

欢迎大家关注或收藏、评论或点赞。



为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


时间: 2024-12-03 21:14:54

【数据结构】回顾栈ADT和队ADT的相关文章

c c++-数据结构,栈和队列,问题

问题描述 数据结构,栈和队列,问题 已知Q 是一个非空队列,S 是一个空栈,借助队列和栈的ADT 函数,将队列Q的所有元素逆置 解决方案 数据结构-栈和队列数据结构-栈和队列<数据结构>第三章 栈和队列问题回收站 解决方案二: 将队列元素都出队到栈中,再将栈中的数据入队 解决方案三: http://zhidao.baidu.com/link?url=dOiiECx8cRRi-hWjhDyWkIJoYigGhttDvdFnx28a9RNh35ddFDuTlXCINA7CCIriyrMRlHDUp

数据结构C++栈的应用-递归

问题描述 数据结构C++栈的应用-递归 求n个正整数阶乘的递归算法(得体现出栈在函数调用中的作用),求源程序 解决方案 堆栈做法 #include <stack> #include <iostream> using namespace std; int f(int n) { stack<int> s; int r = 1; for (int i = 2; i <= n; i++) s.push(i); while (!s.empty()) { r *= s.top

数据结构有关栈的求助啊

问题描述 数据结构有关栈的求助啊 一个栈的入栈序列是12345,则栈的不可能输出序列是() A.35421 B.32451 C.12345 D.54321 答案是D,不知道这类题的做法,请帮忙讲一下,谢谢了 解决方案 你选项没有写错吗?我怎么感觉D也是对的啊 解决方案二: 数据结构-栈和队列数据结构--栈数据结构复习之[栈] 解决方案三: 第一项:压入123 出3 压入45 出5421,第二项:压入123 出32 压入4 出4 压5 出5 最后出1,第三项:压一个出一个,第四项:全部压入后再依次

数据结构有关栈的问题

问题描述 数据结构有关栈的问题 一个栈的入栈序列是12345,则不可能的输出序列为() A.35421 B.32451 C.12345 D.54321 答案是.'D请帮忙讲一下这类题的做法,谢谢了 解决方案 <数据结构>第三章 栈和队列问题回收站数据结构:栈与递归(Hanoi塔问题)数据结构算法问题 栈与队列的应用 解决方案二: D我觉得也是可以的啊,你这题目是不是没放完整? 栈是先进后出,1->5依次进入,再依次弹出 A/B/C/D都可以,除非加了栈大小为4的条件 解决方案三: ABC

数据结构之栈和队列

 我们知道,在数组中,若知道数据项的下标,便可立即访问该数据项,或者通过顺序搜索数据项,访问到数组中的各个数据项.但是栈和队列不同,它们的访问是受限制的,即在特定时刻只有一个数据项可以被读取或者被删除.众所周知,栈是先进后出,只能访问栈顶的数据,队列是先进先出,只能访问头部数据.这里不再赘述.     栈的主要机制可以用数组来实现,也可以用链表来实现,下面用数组来实现栈的基本操作: [java] view plain copy   public class ArrayStack {       

数据结构--用Objective-C简单实现的数据结构:栈

前言:最近在学习数据结构,这里用Objective-C简单实现了一下栈.用Objective-C确实好容易,因为我使用了Cocoa框架提供了NSMutableArray作为存储元素的集合,操作集合元素很方便. 只不过,下面这种实现方法可能不是最优化的,因为NSMutableArray不是最轻量级的集合容器.我现在还不知道如何写出最优化的栈实现,同时还需要满足这一个需求:存储的元素是OC对象 .   使用NSMutableArray作为存储元素的集合的优点:类似C语言实现栈的链式存储结构,就不会和

浅谈算法和数据结构 一 栈和队列

最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且"图码并茂",趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开算法和数据结构,本文简单介绍栈(Stack)和队列(Queue)的实现,.NET中与之相关的数据结构,典型应用等,希望能加深自己对这

JAVA数据结构系列 栈

java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为它要维护自己的指针(Next)引用. package com.rsc.stack; import java.util.LinkedList; /** * 利用链表实现的栈 * @author 落雨 * http://ae6623.cn * @param <T> */ public class Li

数据结构-c++栈问题疑问………………

问题描述 c++栈问题疑问------ 定义栈顶int top为什么不是int *top栈空判断top==-1和top ==base栈满判断top==stacksize-1与top-base==stacksize都行吗?求助 解决方案 关于VC总是重新编译的问题-- 解决方案二: 只要记住栈顶的下标就行了.栈底一般是固定的,如果你初始化的时候将base置为-1了,那么top==stacksize-1与top-base==stacksize是一样的 解决方案三: 一个简单实现: #include<