栈经常被称为什么表,程序中的栈和队列是什么意思

程序中的栈和队列是什么意思啊栈(Stack)是仅限制在表的一端进行插入和删除运算的线性表 , 称插入、删除这一端为栈顶,另一端称为栈底 。表中无元素时为空栈 。栈
的修改是按后进先出的原则进行的,我们又称栈为LIFO表(Last
In
First
Out) 。通常栈有顺序栈和链栈两种存储结构 。
栈的基本运算有六种:
·构造空栈:InitStack(S)
·判栈空:
StackEmpty(S)
·判栈满:
StackFull(S)
·进栈:
Push(S,x)
·退栈:
Pop(S)
·取栈顶元素:StackTop(S)
在顺序栈中有"上溢"和"下溢"的现象 。
·"上溢"是栈顶指针指出栈的外面是出错状态 。
·"下溢"可以表示栈为空栈,因此用来作为控制转移的条件 。
顺序栈中的基本操作有六种:·构造空栈·判栈空·判栈满·进栈·退栈·取栈顶元素
链栈则没有上溢的限制,因此进栈不要判栈满 。链栈不需要在头部附加头结点,只要有链表的头指针就可以了 。
链栈中的基本操作有五种:·构造空栈·判栈空·进栈·退栈·取栈顶元素
队列(Queue)是一种运算受限的线性表,插入在表的一端进行,而删除在表的另一端进行,允许删除的一端称为队头(front),允许插入的
一端称为队尾(rear)
,队列的操作原则是先进先出的 , 又称作FIFO表(First
In
First
【栈经常被称为什么表,程序中的栈和队列是什么意思】Out)
。队列也有顺序存储和链式存储两种存储结
构 。
队列的基本运算有六种:
·置空队:InitQueue(Q)
·判队空:QueueEmpty(Q)
·判队满:QueueFull(Q)
·入队:EnQueue(Q,x)
·出队:DeQueue(Q)
·取队头元素:QueueFront(Q)
顺序队列的"假上溢"现象:由于头尾指针不断前移,超出向量空间 。这时整个向量空间及队列是空的却产生了"上溢"现象 。
为了克服"假上溢"现象引入循环向量的概念,是把向量空间形成一个头尾相接的环形,这时队列称循环队列 。
判定循环队列是空还是满,方法有三种:
·一种是另设一个布尔变量来判断;
·第二种是少用一个元素空间 , 入队时先测试((rear+1)%m
=
front)?
满:空;
·第三种就是用一个计数器记录队列中的元素的总数 。
队列的链式存储结构称为链队列,一个链队列就是一个操作受限的单链表 。为了便于在表尾进行插入(入队)的操作 , 在表尾增加一个尾指
针 , 一个链队列就由一个头指针和一个尾指针唯一地确定 。链队列不存在队满和上溢的问题 。在链队列的出队算法中,要注意当原队中只
有一个结点时,出队后要同进修改头尾指针并使队列变空 。

栈经常被称为什么表,程序中的栈和队列是什么意思

文章插图
栈是什么线性表线性表是最常用、最简单的一种线性结构 。
栈是特殊的线性表,是只允许在一端进行插入和删除的线性表 。允许插入和删除的叫栈顶,反之则是栈底 。栈的插入称为进栈,删除称为出栈 。栈的特性是:后进先出,所以栈也叫后进先出表,简称LIFO表(Last In First Out) 。
线性表和栈的插入和删除操作对比如下:
线性表
Insert(L,i,x)
(1≤i≤n+1)
Delete(L,i)
(1≤i≤n)
如线性表允许在表内任一位置进行插入和删除

Insert(L,n+1,x)
Delete(L,n)
而栈只允许在表尾一端进行插入和删除
栈经常被称为什么表,程序中的栈和队列是什么意思

文章插图
栈的定义栈(stack)又名堆栈,它是一种运算受限的线性表 。
限定仅在表尾进行插入和删除操作的线性表 。这一端被称为栈顶,相对地,把另一端称为栈底 。
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈 , 它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素 。
栈经常被称为什么表,程序中的栈和队列是什么意思

文章插图
要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质 。栈,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方 , 所以才有进栈、出栈的说法 。
首先,系统或者数据结构栈中数据内容的读取与插入(压入)push和 弹出pop是两回事 。压入是增加数据,弹出是删除数据 ,这些操作只能从栈顶即最低地址作为约束的接口界面入手操作  , 但读取栈中的数据是随便的,没有接口约束之说 。
很多人都误解这个理念从而对栈产生困惑 。
而系统栈在计算机体系结构中又起到一个跨部件交互的媒介区域的作用 即 cpu 与内存的交流通道  , cpu只从系统给我们自己编写的应用程序所规定的栈入口线性地读取执行指令,用一个形象的词来形容它就是pipeline(管道线、流水线) 。
栈经常被称为什么表,程序中的栈和队列是什么意思

文章插图
cpu内部交互具体参见 EU与BIU的概念介绍 。
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表 。它按照后进先出的原则存储数据 , 先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来) 。
栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针 。
栈是允许在同一端进行插入和删除操作的特殊线性表 。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈 。插入一般称为进栈(PUSH) , 删除则称为退栈(POP) 。栈也称为先进后出表 。
栈和队列是什么结构问题一:栈和队列都是什么结构 队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去 。
而栈就像一个箱子,后放的在上边,所以后进先出 。
两者的结构通常采用的两种存储结构是顺序存储结构和链表存储结构 。
问题二:什么是栈? 栈的定义:栈是一种特殊的表这种表只在表头进行插入和删除操作 。因此,表头对于栈来说具有特殊的意义,称为栈顶 。相应地,表尾称为栈底 。不含任何元素的栈称为空栈 。
栈的逻辑结构:假设一个栈S中的元素为an,an-1,..,a1,则称a1为栈底元素 , an为栈顶元 素 。栈中的元素按a1 ,a2,..,an-1,an的次序进栈 。在任何时候,出栈的元素都是栈顶元素 。换句话说,栈的修改是按后进先出的原则进行的.因此,栈又称为后进先出(Last In First Out)表,简称为LIFO表 。所以,只要问题满足LIFO原则 , 就可以使用栈 。
notice:换句话说,栈就是可以一个元素进后,可以接着进行输出的表.这道题各个选项的进出次序为:
A:进,出,进,出,进,出,进,进,出,出,进,出,进,出
B:进,进,出,进,出,出,进,进,进,出,出,进,出,出
C:进,出,进,进,进,进,出,出,出,出,进,出,进,出
D:进,进,进,进,出,出,进,进,出,出,出,出,进,出
E:错误.原因自己仿照上面做做看.
所以这道题选E.明白了吗?
问题三:栈的两种存储结构各有哪些优缺点 顺序 存储结构:
优点:连续存储,空间利用率高
缺点:不方便数据的增删
链式存储结构:
优点:对于数据的增删比较方便
缺点:浪费空间
问题四:栈是不是顺序存储的线性结构啊? 呃~弄明白两个概念:存储结构和逻辑结构 。主要的存储结构是顺序存储和链式存储(基本这两个就OK了) 。而逻辑结构是指线性表(栈、队列属于线性表的范畴)、图、二叉树等概念 。理论上所有的逻辑结构都可以用上面两种存储结构在计算机内实现(当然从效率、存储空间等方面考虑实际实现中不同的逻辑结构采用的存储结构会有所偏重)~举个类似的例子:汽车和内燃机,内燃机主要有汽油机和柴油机两类,汽车有卡车、轿车、客车等,理论上所有的汽车都可以用两种内燃机做动力,我可以说客车是汽车,客车既可以是汽油机驱动的汽车也可以有柴油机驱动的汽车 。所以栈是线性表,但栈既可以用可以顺序存储实现也可以用链式存储实现 。
问题五:栈在数据结构中有什么作用呢 可以实现很多算法解决一些问题,比如哈夫曼树中的一种排序可用栈写,以及拓扑排序等之类的,还可以用栈解决迷宫寻路问题
问题六:栈和队列数据结构的特点,什么情况下用到栈,什么情况下用到队列(各举3个例子) 栈:特点就是一个先进后出的结构 。
队列:特点就是一个先进先出的结构 。
一般只要你满足这个特点就可以称之为栈或队列 。
栈的应用:非常广泛,在CPU内部就有提供栈这个机制 。主要用途:函数调用和返回,数字转字符,表达式求值,走迷宫等等 。在CPU内部栈主要是用来进行子程序调用和返回,中断时数据保存和返回 。在编程语言中:主要用来进行函数的调用和返回 。可以说在计算机中,只要数据的保存满足先进后出的原理,都优先考虑使用栈,所以栈是计算机中不可缺的机制 。
队列的应用:队列主要用在和时间有关的地方,特别是操作系统中,队列是实现多任务的重要机制 。windows中的消息机制就是通过队列来实现的 。进程调度也是使用队列来实现,所以队列也是一个重要的机郸 。只要满足数据的先进先出原理就可以使用队列 。
问题七:栈的顺序存储结构 这是结果,需要的话给我个邮箱
/*
在vc++6.0中的输出结果:
------------------------
初始化栈.....
创建一个包含5个不大于100的正整数值的栈(5个值由计算机随机产生)...
栈中的元素从栈底到栈顶为:41 67 34 0 69
请输入要插在栈顶的元素e = 100
栈中的元素从栈底到栈顶为:41 67 34 0 69 100
弹出的栈顶元素 e = 100
栈中的元素从栈底到栈顶为:41 67 34 0 69
栈中元素个数是5
输出从栈顶到栈底的所有元素:69 0 34 67 41
Press any key to continue
--订---------------------------
*/
问题八:C语言中的栈、堆是什么? 计算机中的内存分为两部分:一部分是栈(stack,也称堆栈),另一部分是堆(heap) 。
栈,可以看作是一摞卡片,最上面的卡片表示程序的当前作用域,这往往就是当前正在执行的函数 。当前函数中声明的所有变量都置于栈顶帧中,即占用栈顶帧的内存,这就相当于一摞卡片中最上面的一张卡片 。如果当前函数调用了另一个函数,举例来说,当前函数foo()调用了另一个函数bar(),就会在这摞卡片上再加一个新的卡片 , 这样bar()就有了自己的栈?。╯tack frame)以供使用 。从foo()传递到bar()的所有参数都会从foo()栈帧复制到bar()栈帧中 。(注:栈帧很有意义,因为栈帧可以为每个函数提供一个独立的内存工作区 。如果一个变量是在foo()栈帧中声明的 , 那么调用bar()函数不会对它带来改变,除非你专门要求修改这个变量 。另外,foo()函数运行结束时 , 栈帧即消失,该函数中声明的所有变量都不会再占用内存了 。)
堆,一段完全独立于当前函数或者栈帧的内存区 。如果一个函数中声明了一些变量,而且希望当这个函数完成时其中声明的变量仍然存在,就可以将这些变量置于堆中 。堆和栈相比 , 没那么清晰的结构性 。可以把堆可作是一“堆”小玩艺 。程序可以在任何时间向这个“堆”增加新的东西,或者修改堆中已有的东西 。
栈经常被称为什么表,程序中的栈和队列是什么意思

文章插图


    特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。