1. 在数据结构中,对于栈,空栈时top=-1,是什么意思呢top是指针,top指向栈顶,为什么指针还可以赋值呢
第一问:
指针就是下标,下标就是位序。位序变量top=-1,就是位序为-1:-1的位序当然是非法的,因为C语言中数组下标是从0开始的,-1的位序取不到值,访问a[-1]异常。
第二问:
top可以赋值,指针变量top占有特殊的内存空间,这个空间存放的不是普通数,而是空间的地址,说成是空间的位序也不是不可以的。
2. 为什么栈的初始状态top等于m+1,则说明栈空时top=m+1
这是因为栈的初始状态是确定的。而栈的初始状态,也就是栈空的状态。所以,如果当栈的初始状态top等于m+1。那栈空时的top就等于m+1了。
栈的顺序存储空间为S(1:50),初始状态为top=0。现经过一系列入栈与退栈运算后,top=20,则栈顶-栈底=20-0=20个元素。
栈是向上增长的,每次压入一个元素,栈的TOP指针向上移动一位。当压入第一个元素时,TOP指针指向m+1-1 = m当压入第二个元素时,TOP指针指向m+1-2 = m-1。以此类推,当压入第N个元素时,TOP指针指向m+1-N = 20则N = m+1-20 = m-19。
(2)存储空间top值扩展阅读:
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出表。
在计算机系统中,栈则是一个具有以上属性的动态内存区域。程序可以将数据压入栈中,也可以将数据从栈顶弹出。在i386机器中,栈顶由称为esp的寄存器进行定位。压栈的操作使得栈顶的地址减小,弹出的操作使得栈顶的地址增大。
3. 设栈的存储空间为S(1:50),初始状态为top=0,现经过一系列正常的入栈与退栈操作后,top=
栈的顺序存储空间为S(1:50),初始状态为top=0。
top可以理解为如果要再放入一个元素,这个元素存放的位置为top—1,top=0,top—1=—1,显然不可能在存放下一个元素,所以初始状态为满,经过一系列操作,top为30,同理,如果要再存放一个元素,位置为30—1=29,所以现在30是有元素的,30到50,一共为21个元素,所以答案为21。
4. 在栈中,倒着压与正着压有什么区别
1、入栈时top=top-1,所以是倒着。正压入栈时top=top+1。
2、最大存放空间是m,而初始top是m+1,m+1显然大于m,所以是倒压栈
3、简单的判断就是直接看存储空间最大是多少,如果初始top指向的就是最大存储空间+1就叫做倒压,从大存储空间往小的存储空间存放就叫做倒压
4、栈分两种,开口向下和开口向上的,看top值的大小,入退栈后top值降低就是从上向下压底,如果是开口向上则是栈底的值降底
(4)存储空间top值扩展阅读
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
Sartaj Sahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实 例的数据元素之间的各种联系。
这些联系可以通过定义相关的函数来给出。”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。
Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是ADT(抽象数据类型Abstract Data Type) 的物理实现。”
5. 栈的存储空间:1—m,top=1,不就是在栈顶吗,插入一个,top=2,这样理解哪里不对
栈是先进后出的嘛,栈顶一开始是m+1,那么入站一个元素后,栈顶将变成m,相当于减1。如果你不好想象,我举个例子。如果你把一个杯子打上刻度,杯口是1,杯底是10,杯子的大小刚好能放进一个橘子,如果我们认为一开始杯底是栈顶,也就是10,那么放一个橘子之后,杯底就变成9了,因为你不能再把东西放到比9大的地方,同理,8、7、6,如果你往外拿一个橘子,也是先拿上面的,这就是先进后出,后进先出。
6. 栈的初态为什么是top=m+1
因为top是指向最后一个元素上面的那个,所以是m+1 。
栈的顺序存储空间为S(1:50),初始状态为top=0。现经过一系列入栈与退栈运算后,top=20,则栈顶-栈底=20-0=20个元素。
栈是向上增长的,每次压入一个元素,栈的TOP指针向上移动一位。当压入第一个元素时,TOP指针指向m+1-1 = m当压入第二个元素时,TOP指针指向m+1-2 = m-1。以此类推,当压入第N个元素时,TOP指针指向m+1-N = 20则N = m+1-20 = m-19。
栈的顺序存储空间为S(1:50),初始状态为top=0。现经过一系列入栈与退栈运算后,top=20,则栈顶-栈底=20-0=20个元素。一般平时是从栈底向栈顶压,这道题目中是倒过来的,这个栈是从栈顶向栈底压的,所以结果是C。
top是指向最后一个元素上面的那个,所以是m+1 。
(6)存储空间top值扩展阅读:
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出表。
7. 设栈的顺序存储空间为 S(1:m),初始状态为top=-1,则栈中的数据元素个数为top+1
初始状态为top=-1,说明栈空时top=-1;入栈时栈顶指针是加操作,每入栈一个元素,则栈顶指针top的值加1。故栈中元素的个数应为top+1.
当初始状态为top=m+1时,栈空时top指针为m+1,入栈时栈顶指针是减操作,每入一个,则top减1,设此时 元素为x,则m+1-x=top,可得元素个数为x=m-top+1.
手打不易,供大家评阅,互相交流,如果有用,烦请回复,只想知道大家得到了帮助,希望大家能喜欢。
8. 设栈的存储空间为S(1:m),初始状态为TOP=m+1。经过一系列入栈与退栈操作后,TOP=m
m+1 。
这个栈是从栈顶向栈底压的,一般平时是从栈底向栈顶压,这道题目中是倒过来的。
若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出);置TOP=TOP+1(栈指针加1,指向进栈地址);S(TOP)=X,结束(X为新进栈的元素)。
(8)存储空间top值扩展阅读:
若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢);X=S(TOP),(退栈后的元素赋给X):TOP=TOP-1,结束(栈指针减1,指向栈顶)。
定义stack的简单代码:
stack<int> sta;
入栈:sta.push(x);
出栈:sta.pop();
判断栈的大小: sta.size();
判断栈是否为空:sta.empty();