若栈采用链式存储且仅设头指针,则( )时入栈和出栈操作最方便。
A.采用不含头结点的单链表且栈顶元素放在表尾结点B.采用不含头结点的单链表且栈顶元素放在表头结点C.采用含头结点的单循环链表且栈顶元素随机存放在链表的任意结点D.采用含头结点的双向链表且栈顶元素放在表尾结点
设链栈结点结构为(data,next),top为栈顶指针,当执行入栈操作时需执行下列语句:p=newnode;p->data=x;p->next=top;();
点击查看答案
● 栈和队列都是线性的数据结构。以下关于栈和队列的叙述中,正确的是 (37) 。(37)A. 栈适合采用数组存储,队列适合采用循环单链表存储B. 栈适合采用单链表存储,队列适合采用数组存储C. 栈和队列都不允许在元素序列的中间插入和删除元素D. 若进入栈的元素序列确定,则从栈中出来的序列也同时确定
带链的栈与顺序存储的栈相比,其优点是()。A.入栈与退栈操作方便B.可以省略栈底指针C.入栈操作时不会受栈存储空间的限制而发生溢出D.以上都不对
设栈的顺序存储空间为S(0:49),栈底指针bottom=49,栈顶指针top=30(指向栈顶元素)。则栈中的元素个数为()。A.30B.29C.20D.19
下面关于栈和队列的叙述,错误的是( )。A.栈和队列都是操作受限的线性表B.队列采用单循环链表存储时,只需设置队尾指针就可使入队和出队操作的时间复杂度都为O(1)C.若队列的数据规模n可以确定,则采用顺序存储结构比链式存储结构效率更高D.利用两个栈可以模拟一个队列的操作,反之亦可
阅读下列说明和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*/
设链式栈中结点的结构为(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;