链栈中为何不设置头结点?
第1题:
向一个栈顶指针为h的链栈中插人一个s所指结点时,可执行s->next一h;和_______。
第2题:
阅读下列说明和c函数代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
对二叉树进行遍历是二叉树的一个基本运算。遍历是指按某种策略访问二叉树的每个结点,且每个结点仅访问一次的过程。函数InOrder。()借助栈实现二叉树的非递归中序遍历运算。
设二叉树采用二叉链表存储,结点类型定义如下:
typedef struct BtNode{
ElemTypedata; /*结点的数据域,ElemType的具体定义省略*/
struct BtNode*ichiid,*rchild; /*结点的左、右弦子指针域*/
)BtNode,*BTree;
在函数InOrder()中,用栈暂存二叉树中各个结点的指针,并将栈表示为不含头结点
的单向链表(简称链栈),其结点类型定义如下:
typedef struct StNode{ /*链栈的结点类型*/
BTree elem; /*栈中的元素是指向二叉链表结点的指针*/
struct StNode*link;
}S%Node;
假设从栈顶到栈底的元素为en、en-1、…、e1,则不含头结点的链栈示意图如图5—5
所示。

【C函数】
int InOrder(BTree root) /*实现二叉树的非递归中序遍历*/
{
BTree ptr; /*ptr用于指向二又树中的结点*/
StNode*q; /*q暂存链栈中新创建或待删除的结点指针+/
StNode*stacktop=NULL; /*初始化空栈的栈顶指针stacktop*/
ptr=root; /*ptr指向二叉树的根结点*/
while( (1 ) I I stacktop!=NULL){
while(ptr!=NULL){
q=(StNode*)malloc(sizeof(StNode));
if(q==NULL)
return-1;
q->elem=ptr;(2) ;
stacktop=q; /*stacktop指向新的栈顶*/
ptr=(3 ) ; /*进入左子树*/
}
q=stacktop; (4) ; /*栈顶元素出栈*/
visit(q); /*visit是访问结点的函数,其具体定义省略*/
ptr= (5) ; /*进入右子树*/
free(q); /*释放原栈顶元素的结点空间*/
}
return 0;
}/*InOrder*/
第3题:
若栈采用链式存储且仅设头指针,则( )时入栈和出栈操作最方便。
A.采用不含头结点的单链表且栈顶元素放在表尾结点B.采用不含头结点的单链表且栈顶元素放在表头结点C.采用含头结点的单循环链表且栈顶元素随机存放在链表的任意结点D.采用含头结点的双向链表且栈顶元素放在表尾结点
第4题:
以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为栈顶指针。 
sizeof(structnode)
P->next=top
top=p
略
第5题:
链栈中为何不设置头结点?
第6题:
向一个栈顶指针为HS的链栈中插入一个新结点*P果,应执行()和()操作。
第7题:
从一个栈顶指针为h的链栈中删除一个结点时,用x保存被删结点的值,可执行()和h=h->next;(结点的指针域为next)。
第8题:
设有一个非空的链栈,栈顶指针为hs,要进行出栈操作,用x保存出栈结点的值,找结点的指针域为next,则可执行x=hs一>data;()。
第9题:
第10题:
第11题:
第12题:
第13题:
A、链头
B、链尾
C、链中
D、任意
第14题:
A、S
B、S->next
C、S->next==NULL
D、!S
第15题:
以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为钱顶指针,补充程序。 

略
第16题:
从一个栈顶指针为HS的非空链栈中删除结点并不需要返回栈顶结点的值和回收结点时,应执行()操作。
第17题:
从一个链栈中删除一个结点时,需要把栈顶结点()的值赋给()。
第18题:
设有一个非空的链栈,栈顶指针为hs,要进行出栈操作,用x保存出栈结点的值,栈结点的指针域为next,则可执行x=hs->data;()。
第19题:
向一个栈顶指针为h的链栈中插入一个s所指结点时,可执行()和()操作。(结点的指针域为next)
第20题:
第21题:
第22题:
第23题:
第24题: