1.若一个栈的输入序列为1,2,3,…,N,输出序列的第一个元素是i,则第j个输出元素是j−i−1(F)
解析:如果你想要找出输出序列中的第 j 个元素,不能简单地通过 j-i-1 来得到。实际上,我们需要从输入序列的末尾开始,反向查找第 j 个元素。这是因为栈的输出序列是输入序列的反向序列的前 j 个元素。对于输出序列的第 j 个元素,其值是 N - j + 1,而不是 j-i-1。这里的 i 在这个上下文中没有特定的意义,除非它指的是输出序列的第一个元素,那么 i 就应该是 N。
2.栈底元素是不能删除的元素(F)
解析:栈底元素为栈内最底下的元素,并非不能删除,而是最后删除的元素,当栈底和栈顶相等时,栈底元素即可出栈
3.顺序栈中元素值的大小是有序的。(F)
解析:顺序栈中的元素大小不一定是有序的,顺序栈是指用一组地址连续的存储单元依次存储栈中元素的数据结构,它按照栈的先进后出(FILO)原则进行操作。顺序栈的主要特点是元素在内存中按照顺序排列,但是这种排列并不涉及元素值的大小顺序,即顺序栈中元素的输入和输出顺序时有序的,但与元素大小无关
4.栈顶元素和栈底元素有可能是冋一个元素。
5.若用data[1..m]表示顺序栈的存储空间,则对栈的进栈、出栈操作最多只能进行m次。(F)
解析:栈对出栈和进栈的操作次数并无限制,只是当栈满时,元素则不可再进栈,而栈空时,元素不可再出栈,但如果栈内并未达到栈空或栈满,则对进栈出栈无次数限制
6.(neuDS)在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize,则顺序栈的判空条件是top==0,当储存到第Maxsize时,其位置为Maxsize-1,而top指向栈顶元素的下一个储存空间,即位置为Maxsize,所以当栈空时,top指向0的位置
7.在一个数组里面实现两个堆栈
解题代码如下:
Stack CreateStack(int MaxSize)
{
struct SNode *S=NULL;
S=(struct SNode*)malloc(sizeof(struct SNode));
S->MaxSize=MaxSize;
S->Data=(int*)malloc(sizeof(int)*MaxSize);
S->Top1=-1;
S->Top2=MaxSize;
return S;
}
bool Push(Stack S,ElementType X,int Tag)
{
if(S->Top1==S->Top2-1)
{
printf("Stack Full\n");
return false;
}
else
{
if(Tag==1)
{
S->Data[++(S->Top1)]=X;
}else if(Tag==2){
S->Data[--(S->Top2)]=X;
}
return true;
}
}
ElementType Pop(Stack S,int Tag)
{
if(Tag==1)
{
if(S->Top1==-1)
{
printf("Stack %d Empty\n",Tag);
return ERROR;
}else{
return S->Data[(S->Top1)--];
}
}else if(Tag==2){
if(S->Top2==S->MaxSize)
{
printf("Stack %d Empty\n",Tag);
return ERROR;
}else{
return S->Data[(S->Top2)++];
}
}
}
本题主要注意代码编写时与题目要求的输出形式是否相同,不同即会格式错误,我在修改代码时,因为没有加\n,导致代码一直无法正确执行,写题时要注意代码的输入形式和输出形式!!!