参考答案和解析
正确答案:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。
更多“链栈中为何不设置头结点?”相关问题
  • 第1题:

    向一个栈顶指针为h的链栈中插人一个s所指结点时,可执行s->next一h;和_______。


    参考答案h=s

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


    正确答案:(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发,沿着左孩子分支一直到头(到达一个没有左子树的节点)的处理,从根节点到当前节点的路径信息(节点序列)可以明确构造一个栈来保存。

  • 第3题:

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

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


    正确答案:B

  • 第4题:

    以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为栈顶指针。
    sizeof(structnode)
    P->next=top
    top=p

  • 第5题:

    链栈中为何不设置头结点?


    正确答案:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。

  • 第6题:

    向一个栈顶指针为HS的链栈中插入一个新结点*P果,应执行()和()操作。


    正确答案:p->next=HS;HS=p

  • 第7题:

    从一个栈顶指针为h的链栈中删除一个结点时,用x保存被删结点的值,可执行()和h=h->next;(结点的指针域为next)。


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

  • 第8题:

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


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

  • 第9题:

    填空题
    从一个栈顶指针为h的链栈中删除一个结点时,用x保存被删结点的值,可执行x=h->data;和()。(结点的指针域为next)

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

  • 第10题:

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

    正确答案: HS=HS->nex
    解析: 暂无解析

  • 第11题:

    填空题
    向一个栈顶指针为h的链栈中插入一个s所指结点时,可执行()和()操作。(结点的指针域为next)

    正确答案: s->next=h,h=s
    解析: 暂无解析

  • 第12题:

    填空题
    从一个链栈中删除一个结点时,需要把栈顶结点()的值赋给()。

    正确答案: 指针域,栈顶指针
    解析: 暂无解析

  • 第13题:

    链式栈的栈顶在链表的()位置。

    A、链头

    B、链尾

    C、链中

    D、任意


    答案:A

  • 第14题:

    判定一个栈顶指针为S且不带头结点的链栈为空栈的条件是()。

    A、S

    B、S->next

    C、S->next==NULL

    D、!S


    正确答案:D

  • 第15题:

    以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为钱顶指针,补充程序。

  • 第16题:

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


    正确答案:HS=HS->nex

  • 第17题:

    从一个链栈中删除一个结点时,需要把栈顶结点()的值赋给()。


    正确答案:指针域;栈顶指针

  • 第18题:

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


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

  • 第19题:

    向一个栈顶指针为h的链栈中插入一个s所指结点时,可执行()和()操作。(结点的指针域为next)


    正确答案:s->next=h;h=s;

  • 第20题:

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

    正确答案: p->next=HS,HS=p
    解析: 暂无解析

  • 第21题:

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

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

  • 第22题:

    填空题
    向一个栈顶指针为h的链栈中插入一个s所指结点时,可执行s->next=h;和()操作。(结点的指针域为next)

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

  • 第23题:

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

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

  • 第24题:

    问答题
    链栈中为何不设置头结点?

    正确答案: 链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。
    解析: 暂无解析