若栈采用链式存储且仅设头指针,则( )时入栈和出栈操作最方便。A.采用不含头结点的单链表且栈顶元素放在表尾结点B.采用不含头结点的单链表且栈顶元素放在表头结点C.采用含头结点的单循环链表且栈顶元素随机存放在链表的任意结点D.采用含头结点的双向链表且栈顶元素放在表尾结点

题目

若栈采用链式存储且仅设头指针,则( )时入栈和出栈操作最方便。

A.采用不含头结点的单链表且栈顶元素放在表尾结点B.采用不含头结点的单链表且栈顶元素放在表头结点C.采用含头结点的单循环链表且栈顶元素随机存放在链表的任意结点D.采用含头结点的双向链表且栈顶元素放在表尾结点


相似考题
更多“若栈采用链式存储且仅设头指针,则( )时入栈和出栈操作最方便。A.采用不含头结点的单链表且栈顶元 ”相关问题
  • 第1题:

    下面关于栈和队列的叙述,错误的是( )。

    A.栈和队列都是操作受限的线性表

    B.队列采用单循环链表存储时,只需设置队尾指针就可使入队和出队操作的时间复杂度都为O(1)

    C.若队列的数据规模n可以确定,则采用顺序存储结构比链式存储结构效率更高

    D.利用两个栈可以模拟一个队列的操作,反之亦可


    正确答案:D
    解析:栈和队列都是操作受限的线性表:栈仅在表尾插入和删除元素,队列仅在表头删除元素、在表尾插人元素。入队时初始队列为空,出队后队列变为空要进行特殊处理。入队操作和出队操作均与队列长度无关,因此其时间复杂度都为O(1)。队列是先入先出的线性表,栈是后进先出的线性表。一个线性序列经过队列结构后只能得到与原序列相同的元素序列,而经过一个栈结构后则可以得到多种元素序列。用两个栈可以模拟一个队列的人队和出队操作。

  • 第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;


    正确答案:C
    解析:s作为新的栈顶,top指向s。

  • 第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;


    正确答案:A
    解析:x先取栈顶结点的值,并从栈中去掉这个结点。

  • 第4题:

    用链表作为栈的存储结构时,若要入栈操作成功,则(38)。

    A.必须先判断是否栈满

    B.必须先判断是否栈空

    C.必须先判断栈顶元素的类型

    D.必须成功申请到入栈元素所需结点


    正确答案:D
    本题考查数据结构基础知识。栈的修改要求是仅在表尾进行插入和删防操作,元素间的关系仍是线性的。对于删除操作(即出栈),无论在何种存储方式下实现该运算,栈不为空才能操作成功。对于插入操作(即入栈),要求为新加入的元素准备好存储空间,在链式存储方式下,不存在栈满的情形,只需判断是否为新元素成功申请到需要的结点。

  • 第5题:

    栈的特点是后进先出,若用单链表作为栈的存储结构,并用头指针作为栈顶指针,则( )。

    A.入栈和出栈操作都不需要遍历链表
    B.入栈和出栈操作都需要遍历链表
    C.入栈操作需要遍历链表而出栈操作不需要
    D.入栈操作不需要遍历链表而出栈操作需要

    答案:A
    解析:
    本题用单链表作为栈的存储结构,因为栈的操作是先进后出,因此无论是入栈还是出栈,都只对栈顶元素操作,而在单链表中用头指针作为栈顶指针,此时无论是出栈还是入栈,都只需要对头指针指向的栈顶指针操作即可,不需要遍历链表。

  • 第6题:

    假定利用数组A[N]顺序存储一个栈,top表示栈顶指针,已知栈未满,则x入栈时所执行的操作是()。

    • A、a[--top]=x
    • B、a[top--]=x
    • C、a[++top]=x
    • D、a[top++]=x

    正确答案:D

  • 第7题:

    在一个链式栈中,若栈顶指针等于NULL则为(),在一个链式队列中,若队头指针与队尾指针的值相同,则表示该队列为()或该队列()。


    正确答案:空栈;空;只含有一个结点

  • 第8题:

    设有一个非空的链栈,栈顶指针为hs,要进行出栈操作,用x保存出栈结点的值,找结点的指针域为next,则可执行x=hs一>data;()。


    正确答案:hs===hs一>next;

  • 第9题:

    因为SP所指栈顶为“实”栈顶,所以在入栈和出栈操作时都要先修改堆栈指针SP,再执行入栈、出栈操作。


    正确答案:错误

  • 第10题:

    填空题
    设有一个非空的链栈,栈顶指针为hs,要进行出栈操作,用x保存出栈结点的值,栈结点的指针域为next,则可执行x=hs->data;()。

    正确答案: hs=hs->next
    解析: 暂无解析

  • 第11题:

    单选题
    下列叙述中正确的是(  )。
    A

    有两个指针域的链表称为二叉链表

    B

    循环链表是循环队列的链式存储结构

    C

    带链的栈有栈顶指针和栈底指针,因此又称为双重链表

    D

    结点中具有多个指针域的链表称为多重链表


    正确答案: C
    解析:
    A项错误,双向链表不是二叉链表,但也是有两个指针域;B项错误,循环链表与循环队列是不同的存储结构,循环队列是一种顺序存储结构。C项错误,带链的栈是单链表,结点只有一个指针域。答案选择D选项。

  • 第12题:

    判断题
    因为SP所指栈顶为“实”栈顶,所以在入栈和出栈操作时都要先修改堆栈指针SP,再执行入栈、出栈操作。
    A

    B


    正确答案:
    解析: 暂无解析

  • 第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*/


    正确答案:(1)ptr! =NULL或ptr! =0或ptr(2)q->link=stacktop(3)ptr->lchild(4)stacktop=stacktop->link或stacktop=q->link(5)q->elem->rchild
    (1)ptr! =NULL或ptr! =0或ptr(2)q->link=stacktop(3)ptr->lchild(4)stacktop=stacktop->link或stacktop=q->link(5)q->elem->rchild 解析:对非空二叉树进行中序遍历的方法是:先中序遍历根节点的左子树,然后访问根节点,最后中序遍历根节点的右子树。从以上算法的执行过程可知,从树根出发进行遍历时,递归调用InOrderTraversing(root-LeftChild)使得遍历过程沿着左孩子分支一直走向下层节点,直到到达二叉树中最左下方的节点(设为f)的空左子树为止,然后返回节点,再由递归调用InOrder Traversing(root->RightChild)进入f的右子树,并重复以上过程。在递归算法执行过程中,辅助实现递归调用和返回处理的控制栈实际上起着保存从根节点到当前节点的路径信息。用非递归算法实现二叉树的中序遍历时,可以由一个循环语句实现从指定的根节点m发,沿着左孩子分支一直到头(到达一个没有左子树的节点)的处理,从根节点到当前节点的路径信息(节点序列)可以明确构造一个栈来保存。

  • 第14题:

    对于初始为空的栈S,入栈序列为a、b、c、d,且每个元素进栈、出栈各1次。若出栈的第一元素为d,则合法的出栈序列为()。

    A.dcba

    B.dabc

    C.dcab

    D.dbca


    正确答案:A

  • 第15题:

    下列叙述中正确的是( )。

    A.有两个指针域的链表称为二叉链表

    B.循环链表是循环队列的链式存储结构

    C.带链的栈有栈顶指针和栈底指针,因此又称为双重链表

    D.结点中具有多个指针域的链表称为多重链表.


    正确答案:D
    双向链表与二叉链表均是有两个指针域的链表,A选项错误。在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点,这样的链表称为循环链表。循环队列是队列的一种顺序存储结构。循环链表与循环队列是两种存储结构,B选项错误。双向链表结点有两个指针域,向前一个结点的指针和指向后一个结点的指针,而带链的栈是单链表形式,C选项错误。故正确答案为D选项。

  • 第16题:

    用链表作为栈的存储结构时,若要入栈操作成功,则( )。

    A.必须先判断是否栈满
    B.必须先判断是否栈空
    C.必须先判断栈顶元素的类型
    D.必须成功申请到入栈元素所需结点

    答案:D
    解析:
    本题考查数据结构基础知识。
    栈的修改要求是仅在表尾进行插入和删除操作,元素间的关系仍是线性的。对于删除操作(即出栈),无论在何种存储方式下实现该运算,栈不为空才能操作成功。对于插入操作(即入栈),要求为新加入的元素准备好存储空间,在链式存储方式下,不存在栈满的情形,只需判断是否为新元素成功申请到需要的结点。

  • 第17题:

    向一个栈顶指针为top的链式栈中插入一个新结点*p时,应执行()和()操作。


    正确答案:P->link=top;top=p

  • 第18题:

    从一个栈顶指针为top的非空链式栈中删除节点并不需要返回栈顶结点的值和回收结点时,应执行()操作。


    正确答案:top=top→link

  • 第19题:

    设有一个非空的链栈,栈顶指针为hs,要进行出栈操作,用x保存出栈结点的值,栈结点的指针域为next,则可执行x=hs->data;()。


    正确答案:hs=hs->next;

  • 第20题:

    向一个链式栈插入一个新结点时,首先把栈顶指针的值赋给(),然后把新结点的存储位置赋给()。


    正确答案:新结点的指针域;栈顶指针

  • 第21题:

    填空题
    从一个栈顶指针为top的非空链式栈中删除节点并不需要返回栈顶结点的值和回收结点时,应执行()操作。

    正确答案: top=top→link
    解析: 暂无解析

  • 第22题:

    填空题
    向一个栈顶指针为top的链式栈中插入一个新结点*p时,应执行()和()操作。

    正确答案: P->link=top,top=p
    解析: 暂无解析

  • 第23题:

    填空题
    在一个链式栈中,若栈顶指针等于NULL则为(),在一个链式队列中,若队头指针与队尾指针的值相同,则表示该队列为()或该队列()。

    正确答案: 空栈,空,只含有一个结点
    解析: 暂无解析