① 栈结构通常采用的两种储存结构是和
顺序存储和链接存储,通称顺序队列和链队列,
是计算机科学中一种特殊的串行形式的抽象数据类型,其特殊之处在于只能允许在链表或数组的一端(称为堆栈顶端指针,英语:top)。
进行加入数据(英语:push)和输出数据(英语:pop)的运算。另外堆栈也可以用一维数组或链表的形式来完成。堆栈的另外一个相对的操作方式称为队列。
由于堆栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。
堆栈数据结构使用两种基本操作:推入(压栈,push)和弹出(弹栈,pop):
推入:将数据放入堆栈的顶端(数组形式或串行形式),堆栈顶端top指针加一。
弹出:将顶端数据数据输出(回传),堆栈顶端数据减一。
(1)栈除了可以顺序存储还有什么扩展阅读:
堆栈是一个特定的存储区或寄存器,它的一端是固定的,另一端是浮动的。对这个存储区存入的数据,是一种特殊的数据结构。所有的数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照“后进先出”的原则存取,位于其中间的元素。
必须在其栈上部(后进栈者)诸元素逐个移出后才能取出。在内存储器 (随机存储器) 中开辟一个区域作为堆栈,叫软件堆栈; 用寄存器构成的堆栈,叫硬件堆栈。堆栈处理器就是一种硬件堆栈相对寄存器文件处理器来讲。
它具有很多优点系统复杂度低;精简的指令集;芯片面积小;寻址方式简单;代码体积小;快速的中断响应,子程序调用能力。这些优点使得堆栈处理器在工业控制领域和航空航天领域有着不可替代的地位。
② 栈的存储结构
栈同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构。
栈的具体实现
栈是一种 "特殊" 的线性存储结构,因此栈的具体实现有以下两种方式:
顺序栈:采用顺序存储结构可以模拟栈存储数据的特点,从而实现栈存储结构;
链栈:采用链式存储结构实现栈结构;
栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 "存" 和 "取" 的过程有特殊的要求:
栈只能从表的一端存取数据,另一端是封闭的;
在栈中,无论是存数据还是取数据,都必须遵循"先进后出"的原则,即最先进栈的元素最后出栈。
通常,栈的开口端被称为栈顶;相应地,封口端被称为栈底。因此,栈顶元素指的就是距离栈顶最近的元素。
③ 给出栈的两种存储结构的形式名称,在这两种栈的存储结构中如何判别栈空与栈满
【解答】(1)顺序栈 (top用来存放栈顶元素的下标)
判断栈S空:如果S->top==-1表示栈空。
判断栈S满:如果S->top==Stack_Size-1表示栈满。 (2) 链栈(top为栈顶指针,指向当前栈顶元素前面的头结点) 判断栈空:如果top->next==NULL表示栈空。
判断栈满:当系统没有可用空间时,申请不到空间存放要进栈的元素,此时栈满。
④ 有哪几种进栈的方式
序列个数太多,以123为例:123进栈,出栈321;1进栈,1出栈,2进栈,2出栈,3进栈,3出栈,所以是123,以此类推。
4个元素的全排列共有24种,栈要求符合后进先出,按此衡量排除后即得:
1234√ 1243√ 1324√ 1342√ 1423× 1432√
2134√ 2143√ 2314√ 2341√ 2413× 2431√
3124× 3142× 3214√ 3241√ 3412× 3421√
4123× 4132× 4213× 4231× 4312× 4321√
14种可能,10种不可能,如上所示。
(4)栈除了可以顺序存储还有什么扩展阅读:
栈的顺序存储结构是利用内存中的一片起始位置确定的连续存储区域来存放栈中的所有元素,另外为了指示栈顶的准确位置,还需要引入一个栈顶指示变量top,采用顺序存储结构的栈称为顺序栈(sequence stack)。设数组data[MAXSIZE]为栈的存储空间,其中MAX-SIZE是一个预先设定的常数,为允许进栈结点的最大可能数目,即栈的容量。
初始时栈空,top等于0。当top不等于0时,data[0]为栈底元素,即为当前停留在栈中时间最长的元素;而data[top-1]为最后入栈的元素,即为栈顶元素。
⑤ 栈只能顺序存储吗
自动变量都是在栈里申请内存的,栈只能按顺序使用内存,先定义的变量在栈低,后定义的在栈顶。。。窄想释放一个内存,只能释放栈顶,其他位置不行,所以栈内内存都是连续的,不会像堆一样想释放谁释放谁,使用中的内存不连续。。。。
⑥ 栈结构通常采用的两种储存结构是和
链接存储:链栈
带有头指针或头结点的单循环链表。
顺序存储:数组实现,
⑦ 栈只能顺序存储,这句话对吗,为什么
栈只能顺序存储,这句话不对。栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom)。
一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。所以栈也称为后进先出表。线性表可以顺序存储,也可以链式存储,因此栈也可以采用链式存储结构。
(7)栈除了可以顺序存储还有什么扩展阅读:
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。
在计算机系统中,栈则是一个具有以上属性的动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。在i386机器中,栈顶由称为esp的寄存器进行定位。压栈的操作使得栈顶的地址减小,弹出的操作使得栈顶的地址增大。
栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息:
1、函数的返回地址和参数。
2、临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。
链式存储结构的特点:
1、比顺序存储结构的存储密度小(链式存储结构中每个结点都由数据域与指针域两部分组成,相比顺序存储结构增加了存储空间)。
2、逻辑上相邻的节点物理上不必相邻。
3、插入、删除灵活 (不必移动节点,只要改变节点中的指针)。
4、查找节点时链式存储要比顺序存储慢。
5、每个节点是由数据域和指针域组成。
6、由于簇是随机分配的,这也使数据删除后覆盖几率降低,恢复可能提高。
顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。
采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。但顺序存储方法的主要缺点是不便于修改,对结点的插入、删除运算时,可能要移动一系列的结点。
参考资料:网络-栈
参考资料:网络-链式存储结构
参考资料:网络-顺序存储结构
⑧ 栈的顺序存储是什么
由于栈是运算受限的线性表,因此线性表的存储结构对栈也适用,而线性表有顺序存储和链式存储两种,所以栈也有顺序存储和链式存储两种。
1.栈的顺序存储栈的顺序存储是利用一组地址连续的存储单元依次存放从栈底到栈顶的数据元素,并附设指针top指示栈顶。
2.栈的顺序存储类型定义1)用内存动态分配方式定义栈的顺序存储(1)栈的顺序存储表示。
顺序栈本质上是顺序表的简化,由于栈底位置是固定不变的,所以可以将栈底位置设置在存储空间的基地址上,栈顶位置是随着进栈和退栈操作而变化的,故用top来指示当前栈顶元素的下一个位置,通常称top为栈顶指针。
⑨ 栈和链表是两种不同的数据结构吗
是不同的数据结构不过它们本身是不同的分类通常说的链表指的是用链式存储方式存储的“线性表”因为数据的存储分两大类:顺序存储(数组)链式存储(链表)而按逻辑分又有:线性表,栈,队列,树,图等栈有顺序存储也有链式的,分别为顺序栈和链栈而线性表也有两种存储方式分别叫顺序表和链表楼上说的先进先出的那叫队列栈是先进后出而链表没什么先进先出之类的它可以在任意位置插入所以不能这样讨论⑩ 栈是什么结构
问题一:栈和队列都是什么结构 队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。
而栈就像一个箱子,后放的在上边,所以后进先出。
两者的结构通常采用的两种存储结构是顺序存储结构和链表存储结构。
问题二:什么是栈? 栈的定义:栈是一种特殊的表这种表只在表头进行插入和删除操作。因此,表头对于栈来说具有特殊的意义,称为栈顶。相应地,表尾称为栈底。不含任何元素的栈称为空栈。
栈的逻辑结构:假设一个栈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()就有了自己的栈帧(stack frame)以供使用。从foo()传递到bar()的所有参数都会从foo()栈帧复制到bar()栈帧中。(注:栈帧很有意义,因为栈帧可以为每个函数提供一个独立的内存工作区。如果一个变量是在foo()栈帧中声明的,那么调用bar()函数不会对它带来改变,除非你专门要求修改这个变量。另外,foo()函数运行结束时,栈帧即消失,该函数中声明的所有变量都不会再占用内存了。)
堆,一段完全独立于当前函数或者栈帧的内存区。如果一个函数中声明了一些变量,而且希望当这个函数完成时其中声明的变量仍然存在,就可以将这些变量置于堆中。 堆和栈相比,没那么清晰的结构性。可以把堆可作是一“堆”小玩艺。程序可以在任何时间向这个“堆”增加新的东西,或者修改堆中已有的东西。