非空的循环单链表L的尾结点(由p所指向)满足()
A.p->next==NULL
B.p->next==L
C.p ==NULL
D.p==L
A.p->next==NULL
B.p->next==L
C.p ==NULL
D.p==L
设线性表为(1,13,16,18) ,以下程序用说明结构变量的方法建立头指针为head,尾结,点为18的单向循环链表,并输出链表中各结点中的数据。
#define NULL 0
Void main()
{
NODE a,b,c,d,*head,*p;
a.data=1;
b.data=13;
c.data=16;
d.data=18; /* d是尾结点*/
head=();
a.next=&b;
d.data=18; /* d是尾结点*/
head=();
a.next=&b;
b.next=&c;
c.next=&d;
()=head; /*以上结束建立循环链表的过程*/
p=head; /* p为工作指针,准备输出链表*/
do
{
printf("%d/n",());
();
}while();
}
(1)编写一个算法,从任一给定的位置(pr,p)开始,将指针p右移k个结点。如果p移出链表,则将p为0,并让pr停留在链表最右边的结点上。
(2)编写一个算法,从任一给定的位置(pr,p)开始,将指针p左移k个结点。如果p移出链表,则将p置为0,并让pr停留在链表最左边的结点上。
A.elemHead
B.elemTail
C.elemHead->next和elemHead
D.elemTail->next和elemTail
(1)沿袭5-60题使用逆转链遍历二叉树的思想。
(2)不使用tag标志,而是用内嵌的栈代替tag的作用。该内嵌的栈使用了叶结点作为栈的结构,没有另外定义栈的存储空间。
(3)利用栈解决在回溯时分辨究竟是从左子树还是右子树上升的问题,步骤是:
①当进入有非空左子树的结点的右子树时,将该结点的地址进栈。
②在回溯过程中如遇到结点的左、布子树都非空时,如果该结点就是存于栈顶的结点,则可判定当前是从该结点的右子树退回,该结点的右子女指针指向它的父结点;否则当前是从该结点的左子树退回,该结点的左子女指向它的父结点。