数据结构,图中的S.top-S.base什么意思,为什么这样就能判断栈满?

S.top是栈顶指针,S.base是栈底指针,两者一减得到栈中元素个数,如果该值大于等于栈容量则说明栈满。

s.stacksize表示栈的容量,即栈能存放多少个元素。
S.top-S.base表示栈中已经存放元素的个数,当这个值达到s.stacksize则栈已无空间存放要入栈的元素了

指针也是一种变量类型,输出出来就是串数字,你可以自己写个程序输出一下。
只不过可能用16进制表示的,但是两个数的差值是不变的。所以S.top-S.base可以得到
eg:两个指针a,b;a的指针地址是100,b的指针地址是50,则a-b九能算出他们之间的间隔

数据结构中的入栈程序 S.top = S.base + S.stacksize; 这句话的作用

作用是重新定义初始化操作。S.top - S.base >= S.stacksize 说明内存发生溢出,这时候就需要再次重新增加内存,s.base 发生改变。重新定义初始化操作。
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为先进后出表。

扩展资料:
1、进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2、退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。

这个形参&S中&是C++中引用,这里的作用是传递的参数就是已有结构体的本身,不再复制副本,具体网上有关C++引用的内容很多,自行查看吧;
S.base,是通过结构体类型变量引用成员。
S->base,是通过结构体类型指针引用成员,也就是说,S应该是一个指针变量。


数据结构 这里为什么栈顶要减一就是s.top-1
图中并没有s.top-1 这里涉及到两种不同的策略,那就是(a)s.top是直接指向栈顶呢还是(b)s.top指向栈顶之上的空位置。不管哪种策略,都存在s.top-1的问题。对于(a), 出栈的时候,先取栈顶s.top指向的元素,再s.top-1;对于(b),出栈的时候,先s.top-1,再取s.top指向的元素。入栈的...

数据结构判断回文算法,帮忙看一下
if(!S.base) exit(0); S.top=S.base; S.stacksize=MAXSIZE; return 1;}int Push(SqStack &S,SElemType e){ \/\/判断栈满的情况 if(S.top-S.base==S.stacksize) return 0; *S.top++=e; return 1;}int Pop(SqStack &S,SElemType &e){ \/\/防止栈空时...

数据结构 数值转换问题,高手看下
define STACK_INIT_SIZE 900 typedef struct{ int *base;int *top;int stacksize;}SqStack;void InitStack(SqStack &S){ S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));S.top=S.base;S.stacksize=STACK_INIT_SIZE;} void Push(SqStack &S,int e){ \/* if(S.top-S.base>=S....

谁能帮我看看我的这个数据结构的题哪里错了啊??我要的是先序遍历输出2...
S.top=S.base;S.stacksize=S_INIT_SIZE;return OK;}\/\/InitS Status Gettop(SqS S, BT &e){ if(S.top==S.base) return ERROR;e=*(S.top-1);return OK;}\/\/Gettop Status Push(SqS &S,BT e){ \/\/插入元素为e的栈顶元素 if(S.top-S.base>=S.stacksize){ \/\/栈满,追加...

C++设计迷宫找出多条路径怎么弄?
bool Push(SqStack &S,SElemType e)\/\/栈插入函数 { if(S.top-S.base>=S.stacksize) { S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(SElemType)); if(!S.base) { return 0; } S.top=S.base+S.stacksize; S.stacksize=S.stacksize+STACKINCREAMENT; } *S.top...

C语言数据结构:s->top=0和s->top==0有什么区别?
意思是把右边的常量赋值给左边的变量,且左边只能是变量;==表示关系运算中的一种,指的是判断这个关系运算符号的左右两边的数据是否满足这个符号的要求,若是满足也式子的结果为真,若是不满足则式子的结果为假。这里==表示判断两边是否相等。综上所述,您题目中的两个表达式的区别很大哦。

我没学过数据结构,但是考计算机二级涉及到这方面的知识点,这道题怎么...
但是这一道题的栈空间如下图所示:针对这一题,这个栈是从栈顶向栈底压的,一般平时是从栈底向栈顶压,这道题目中是倒转过来的。top=m+1,如果放了一个元素,那么TOP就等于m+1-1 =m,这个时候正好top=m,说明往里放入了一个元素,现在再退出一个元素,正好还原,所以top=m+1。你可以理解成...

数据结构出栈中*e=s->data[s->top]是什么意思
从你的代码看应该是C语言或C++吧。在代码中s应该是一个结构体指针,结构体中包括用于存储压入栈数据数组data[],和表示栈顶的变量top(一般栈为空时 top=-1,压入一个加1)因而s->data[s->top]的意思就是:最后压入的数据,也就是栈顶的数据。例如压入了5个数据,就相当于最后的一个数据data...

利用栈实现逆波兰表达式求值
S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK;}Status GetTop(SqStack S){ ElemType e; if (S.top == S.base) return ERROR; e = *(S.top-1); return e;}Status Push (SqStack &S,ElemType e){ \/\/插入元素e为新的栈顶元素 if (S.top - S.base >= S.stacksize){ ...

数据结构关于栈,判断栈空,有的书上说,s.top=0,有的说=-1。有的书让栈...
首先这个问题,问的是栈的实现问题,这两种做法都可以。取决设计者。看你下面的追问:栈,允许操作的一段是表头还是表尾 在一般数据结构书中的定义 ,栈是一般都是指仅在表尾进入插入或删除操作的线性表。对于那个截图,根据定义,显然C是对的 ...