判定一个栈顶指针为S且不带头结点的链栈为空栈的条件是()。
A、S
B、S->next
C、S->next==NULL
D、!S
A、S
B、S->next
C、S->next==NULL
D、!S
向一个栈顶指针为H的链栈中插入一个s所指向的结点时,需执行()。
A.H->link=s
B.s->link=H->link;H->link=s;
C.s->link=H;H=s;
D.s->link=H;H=H->link;
A.x=top;top=top->next;
B.x=top->data;
C.top=top->next;x=top->data;
D.x=top->data;top=top->next;
A.top→link=s;
B.s→link=top→link;top→link=s;
C.s→link=top;top=s;
D.s→link=top;top=top→link;
A.发生栈满的错误
B.2
C.m
D.0
A、n个元素进入一个栈后,它们的出栈顺序一定与进栈顺序相反
B、若一个栈的存储空间为S[n],则对栈的进栈和出栈操作最多只能执行n次
C、栈是一种对进栈、出栈操作的次序做了限制的线性表
D、空栈没有栈顶指针
●试题二
阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
函数print(BinTreeNode*t;DateType &x)的功能是在二叉树中查找值为x的结点,并打印该结点所有祖先结点。在此算法中,假设值为x的结点不多于一个。此算法采用后序的非递归遍历形式。因为退栈时需要区分右子树。函数中使用栈ST保存结点指针ptr以及标志tag,Top是栈顶指针。
【函数】
void print(BinTreeNode*t;DateType &x){
stack ST;int i,top;top=0;∥置空栈
while(t!=NULL &&t->data!=x‖top!=0)
{while(t!=NULL && t->data!=x)
{
∥寻找值为x的结点
(1) ;
ST[top].ptr=t;
ST[top].tag=0;
(2) ;
}
if(t!=Null && t->data==x){∥找到值为x的结点
for(i=1; (3) ;i++)
printf("%d",ST[top].ptr->data);}
else{
while((4) )
top--;
if(top>0)
{
ST[top].tag=1;
(5) ;
}
}
}
若需将一个栈S中的元素逆置,则以下处理方式中正确的是______。
A.将栈S中元素依次出栈并入栈T,然后栈T中元素依次出栈并进入栈S
B.将栈S中元素依次出栈并入队,然后使该队列元素依次出队并进入栈S
C.直接交换栈顶元素和栈底元素
D.直接交换栈顶指针和栈底指针
假设用一个长度为 50 的数组 (数组元素的下标从 0 到 49) 作为栈的 存储 空间,栈底指针 bottom 指向栈
底元素,栈顶指针 top 指向栈顶元素,如果 bottom=49 , top=30(数组下标 ) ,则栈中具有 【 1 】 个元素。
A.B、C
B.A、B
C.A、C
D.B、D
●试题三
阅读下列说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
本题给出四个函数,它们的功能分别是:
1.int push(PNODE *top,int e)是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。
2.int pop(PNODE *top,int *e)是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。
3.int enQueue(PNODE *tail,int e)是入队函数,形参tail是队尾指针的指针,形参e是入队元素。
4.int deQueue(PNODE *tail,int *e)是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。
以上四个函数中,返回值为0表示操作成功,返回值为-1表示操作失败。
栈是用链表实现的;队是用带有辅助结点(头结点)的单向循环链表实现的。两种链表的结点类型均为:
typedef struct node{
int value;
struct node *next;
}NODE,*PNODE;
【函数1】
int push(PNODE *top,int e)
{
PNODE p=(PNODE)malloc (sizeof(NODE));
if (!p) return-1;
p-> value =e;
(1) ;.
*top=p;
return 0;
}
【函数2】
int pop (PNODE *top,int *e)
{
PNODE p=*top;
if(p==NULL)return-1;
*e=p->value;
(2) ;
free(p);
return 0;
}
【函数3】
int enQueue (PNODE *tail,int e)
{PNODE p,t;
t=*tail;
p=(PNODE)malloc(sizeof(NODE));
if(!p)return-l;
p->value=e;
p->next=t->next;
(3) ;
*tail=p;
return 0;
}
【函数4】
int deQueue(PNODE *tail,int *e)
{PNODE p,q;
if((*tail)->next==*tail)return -1;
p=(*tail)->next;
q=p->next;
*e=q->value;
(4) =q->next;
if(*tail==q) (5) ;
free(q);
return 0;
}