一个顺序栈S,其栈顶指针为top,则将元素e入栈的操作是( )。
A. *S->top=e;S->top++; B. S->top++;*S->top=e;
C. *S->top=e D. S->top=e;
先赋值,再指针
入栈、先数据再指针
这题条件不够,如果初始top=-1,那么就是先移动指针再赋值;如果初始条件top=0,才是先赋值再移动指针。
没给top的初值选AB都可以的。
如果栈顶指针指-1,top不先加1怎么入栈
1. 顺序栈入栈: 存数据: 将新元素直接存入栈顶指针 top 当前指向的位置。 移指针: 将栈顶指针 top 加 1,指向下一个空闲位置,为下一次入栈做准备。 2. 链式栈入栈: 创建新节点: 创建一个新节点,将新元素存入节点的数据域。 修改指针: 将新节点的指针指向原栈顶节点,然后将栈顶指针指向新节点。
题出的有问题
快乐小土狗 回复 wmjim: 没有问题,书上top指针指向的栈顶元素的下一个位置
decade 回复 wmjim: 有问题,应该选b,入栈要先移动指针,后赋值
题的意思是指针指向栈顶元素,应该为先移动指针再放元素e;指针+1,再入栈
即初始化时指针top为-1
答案选项给出的条件应该为指针指向栈顶元素+1位置
即初始化时指针top为0
先看栈的top指针是指向栈顶元素,还是栈顶元素的下一个位置。
如果top指向栈顶元素,那么入栈时应该先修改指针再放元素;
如果top指向栈顶元素的下一个位置,那么入栈时应该先放元素再修改指针。
不应该是先移动top吗
admin 回复 Robber: 标准操作是先赋值再移动下标,可以看一下书上的代码
chongci211 回复 admin: 书上就是栈顶指针先加1,再送值到栈顶元素
此题不严谨,应加上条件,初始时将top定为0
admin 回复 非加力: 这个条件没有必要
栈不是需要申请新空间然后赋值吗?求大佬解答
zyjf 回复 我超白好嘛: 栈空间应该是被规定的,否则不会有溢出的说法
admin 回复 我超白好嘛: 注意审题,顺序栈,不是链式栈
A
C语言的顺序栈就是用数组...
用户登录可进行刷题及查看答案
C语言的顺序栈就是用数组实现的先进后出的数据结构,默认情况下,栈顶指针top指向的位置是“空”的,即这个位置还没有存放元素。
栈初始的代码如下,示意图是下图的左侧。
#include <stdio.h> #include <stdlib.h> typedef struct stack { int size; int* head; int* top; } Stack; void initial(Stack *s, int size) { int* values = (int *)malloc(sizeof(int) * size); s->top = values; s->head = values; s->size = size; } int push(Stack *s, int v) { // check stack full or not if (s->top >= s->head + s->size) return -1; *s->top++ = v; return 0; } int pop(Stack *s) { // check stack empty or not if (s->top == s->head) return -1; return *s->top--; }
所以,入栈的时候,是先存入元素,再让top加一。相应的,出栈的时候,需要先将top减一,再取元素。
这样做的好处是,代码比较简洁,入栈和出栈代码只要一行即可(不算边界检测)。
登录后提交答案