A.采用非递归方式重写递归程序是必须使用栈。
B.函数调用时,系统要用栈保存必要的信息。
C.只要确定了入栈次序,即可确定出栈次序。
D.栈是一种受限的线性表,允许在其两端进行操作。
E.消除递归不一定需要使用栈。
F.进栈和出栈操作的算法时间复杂度均为 O(n)。
G.两个栈共享一片连续的内存空间时,为了提高内存利用率、减少溢出,应当把两个栈的栈底分别设置在整篇内存空间的两端。
第1题
A.采用非递归方式重写递归程序是必须使用栈。
B.函数调用时,系统要用栈保存必要的信息。
C.只要确定了入栈次序,即可确定出栈次序。
D.栈是一种受限的线性表,允许在其两端进行操作。
E.消除递归不一定需要使用栈。
F.进栈和出栈操作的算法时间复杂度均为 O(n)。
G.两个栈共享一片连续的内存空间时,为了提高内存利用率、减少溢出,应当把两个栈的栈底分别设置在整篇内存空间的两端。
第2题
第3题
某语言允许过程嵌套定义和递归调用(如Pascal)语言,若在栈式动态存储分配中采用嵌套层次显示表display解决对非局部变量的引用问题,试给出下列程序执行到语句“b:=10;时运行栈及display表的示意图。”
第4题
阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。
【说明】
本程序利用非递归算法实现二叉树后序遍历。
【函数】
include<stdio.h>
include<stdlib.h>
typedef struct node{/*二叉树的结点数据结构类型*/
char data;
struct node *left;
struct node *right;
}BTREE;
void SortTreelnsert(BTREE **tree, BTREE *s)
{
if(*tree==NULL)*tree=s;
else
if(s->data<(*tree)->data)
SortTreelnsert((1),s);
else if(s->data>=(*tree)->data)
SortTreelnsert((2),s);
}
void TraversalTree(BTREE *tree)
{
BTREE *stack[1 000],*p;
int tag[1000],top=0;
p=tree;
do{
while(p !=NULL)
{
stack[++top]=p;
(3);
tag[top]=0; /*标记栈顶结点的左子树已进行过后序遍历*/
}
while(top>0&&(4))/*栈顶结点的右子树是否被后序遍历过*/
{
p=stack[top--];
putchar(p->data);
}
if(top>0)/*对栈顶结点的右子树进行后序遍历*/
{
(5);
tag[top]=1;
}
}while(top>0);
}
void PrintSortTree(BTREE *tree)
{
if(tree !=NULL)
{
printSortTree(tree->left);
putchar(tree->data);
pdntSortTree(tree->right);
}
}
main()
{
BTREE *root=NULL, *node;
char ch;
ch=getchar();
while(ch !='')
{
node=(BTREE*)malloc(sizeof(BTREE));
node->data=ch;
node->left=node->right=NULL;
SortTreelnsert(&root, node);
ch=getchar();
}
PrintSortTree(root);
putchar('\n');
TraversalTree(root);
}
第6题
已知Ackerman函数定义如下:
(1)根据定义,写出它的递归求解算法;
(2)利用栈,写出它的非递归求解算法。
第9题
栈结构不适用于下列()应用。
A)表达式求值
B)递归过程实现
C)二叉树对程序周游算法的实现
D)树的层次次序周游算法的实现
第10题
二叉树以二叉链表存储,写出对二叉树进行先序遍历的非递归算法。
解题思路:二叉树的先序遍历非递归算法利用栈结构,从二又树的根结点开始,输出结点信息,同时将结点指针入栈,然后顺着左子树,依次将其左子树各个结点值输出,同时结点指针入栈,直到左子树为空;然后让栈顶指针出栈,接着处理右子树。
为了保护您的账号安全,请在“赏学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!