若栈采用链式存储且仅设头指针,则( )时入栈和出栈操作最方便。
A.采用不含头结点的单链表且栈顶元素放在表尾结点B.采用不含头结点的单链表且栈顶元素放在表头结点C.采用含头结点的单循环链表且栈顶元素随机存放在链表的任意结点D.采用含头结点的双向链表且栈顶元素放在表尾结点
第1题:
下面关于栈和队列的叙述,错误的是( )。
A.栈和队列都是操作受限的线性表
B.队列采用单循环链表存储时,只需设置队尾指针就可使入队和出队操作的时间复杂度都为O(1)
C.若队列的数据规模n可以确定,则采用顺序存储结构比链式存储结构效率更高
D.利用两个栈可以模拟一个队列的操作,反之亦可
第2题:
设链式栈中结点的结构为(data,link),且top是指向栈顶的指针。若想在链式栈的栈顶插入一个由指针s所指的结点,则应执行的操作是(31)。
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;
第3题:
设链式栈中结点的结构为(data,link),且top是指向栈顶的指针。若想摘除链式栈的栈顶结点,并将被摘除结点的值保存到x中,则应执行的操作是(32)。
A.x=top->data;top=top->link;
B.top=top->link;x=top->data;
C.x=top;top=top->link;
D.x=top->data;
第4题:
用链表作为栈的存储结构时,若要入栈操作成功,则(38)。
A.必须先判断是否栈满
B.必须先判断是否栈空
C.必须先判断栈顶元素的类型
D.必须成功申请到入栈元素所需结点
第5题:
第6题:
假定利用数组A[N]顺序存储一个栈,top表示栈顶指针,已知栈未满,则x入栈时所执行的操作是()。
第7题:
在一个链式栈中,若栈顶指针等于NULL则为(),在一个链式队列中,若队头指针与队尾指针的值相同,则表示该队列为()或该队列()。
第8题:
设有一个非空的链栈,栈顶指针为hs,要进行出栈操作,用x保存出栈结点的值,找结点的指针域为next,则可执行x=hs一>data;()。
第9题:
因为SP所指栈顶为“实”栈顶,所以在入栈和出栈操作时都要先修改堆栈指针SP,再执行入栈、出栈操作。
第10题:
第11题:
有两个指针域的链表称为二叉链表
循环链表是循环队列的链式存储结构
带链的栈有栈顶指针和栈底指针,因此又称为双重链表
结点中具有多个指针域的链表称为多重链表
第12题:
对
错
第13题:
阅读下列说明和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*/
第14题:
对于初始为空的栈S,入栈序列为a、b、c、d,且每个元素进栈、出栈各1次。若出栈的第一元素为d,则合法的出栈序列为()。
A.dcba
B.dabc
C.dcab
D.dbca
第15题:
下列叙述中正确的是( )。
A.有两个指针域的链表称为二叉链表
B.循环链表是循环队列的链式存储结构
C.带链的栈有栈顶指针和栈底指针,因此又称为双重链表
D.结点中具有多个指针域的链表称为多重链表.
第16题:
第17题:
向一个栈顶指针为top的链式栈中插入一个新结点*p时,应执行()和()操作。
第18题:
从一个栈顶指针为top的非空链式栈中删除节点并不需要返回栈顶结点的值和回收结点时,应执行()操作。
第19题:
设有一个非空的链栈,栈顶指针为hs,要进行出栈操作,用x保存出栈结点的值,栈结点的指针域为next,则可执行x=hs->data;()。
第20题:
向一个链式栈插入一个新结点时,首先把栈顶指针的值赋给(),然后把新结点的存储位置赋给()。
第21题:
第22题:
第23题: