回答好加分
第一 二叉树及其应用
作业目的:熟悉二叉树的特征,掌握二叉树的基本算法实现。
作业要求:
(1)对未实现的程序部分给出设计的基本思想、原理和算法描述,并对代码给出注释。
(2)对给出的作业程序认真阅读,再将其补充完整后运行。
(3)保存程序的运行结果,并结合程序进行分析。
注意事项:
源程序代码在运行前注意存盘;运行时注意输入数据的格式要求。
作业内容:
要求采用二叉链表作为存储结构,完成二叉树的建立算法、二叉树的非递归遍历的操作;
1、二叉树的递归创建算法:
void createbintree(bintree *t)
{
char ch;
if ((ch=getchar())==' ')*t=NULL;
else
{
*t=(bintnode *)malloc(sizeof(bintnode));
(*t)->data=ch;
createbintree(&(*t)->lchild);
createbintree(&(*t)->rchild);
}
}
2、二叉树前序遍历的非递归函数
void preorder1(bintree t)
{
seqstack s;
s.top=-1;
while ((t) || (s.top!=-1))
{
while (t)
{
printf("%c ",t->data);
s.top++;
s.data[s.top]=t;
t=t->lchild;
}
if (s.top>-1)
{
t=pop(&s);
t=t->rchild;
}
}
}
3、二叉树中序遍历的非递归函数
void inorder1(bintree t)
{
seqstack s;
s.top=-1;
while((t!=NULL) || (s.top!=-1))
{
while (t)
{
push(&s,t);
t=t->lchild;
}
if (s.top!=-1)
{
t=pop(&s);
printf("%c ",t->data);
t=t->rchild;
}
}
}
4、二叉树后序遍历的非递归函数
void postorder1(bintree t) /*非递归实现二叉树的后序遍历*/
{
seqstack s;
s.top=-1;
while ((t)||(s.top!=-1))
{
while (t)
{
s.top++;
s.data[s.top]=t;
s.tag[s.top]=0;
t=t->lchild;
}
while ((s.top>-1)&& (s.tag[s.top]==1))
{
t=s.data[s.top];
printf("%c ",t->data);
s.top--;
}
if (s.top>-1)
{
t=s.data[s.top];
s.tag[s.top]=1;
t=t->rchild;
}
else t=NULL;
}
}
5、补充并运行二叉树的递归前序遍历、递归中序遍历、递归后序遍历的函数。
(1)前序遍历二叉树的递归算法
void preorder(bintree t)
{
if (t)
{
printf("%c",t->data);
preorder(t->lchild);
preorder(t->rchild);
}
}
(2) 中序遍历二叉树的递归算法
void inorder(bintree t)
{
if (t)
{
inorder(t->lchild);
printf("%c",t->data);
inorder(t->rchild);
}
}
(3)后序遍历二叉树的递归算法
void postorder(bintree t)
{
if (t)
{
postorder(t->lchild);
postorder(t->rchild);
printf("%c",t->data);
}
}
作业四 排序
作业目的:掌握排序的各种算法思想,并能通过其解决应用问题。
作业要求:
(1)给出程序设计的基本思想、原理和算法描述。
(2)对源程序给出注释。
(3)保存程序的运行结果,并结合程序进行分析。
作业内容:
1、给定一含20个整型数据的数组,利用堆排序的思想将其进行非降序排列。
2、给定一含20个整型数据的数组,利用快速排序方法将其进行升序排列。
3、给定一含20个整型数据的数组,利用希尔排序方法将其进行非降序排列。
作业五 查找
作业目的:掌握数据结构中查找的基本算法思想,并能进行应用。
作业要求:
(1)给出程序设计的基本思想、原理和算法描述。
(2)对源程序给出注释。
(3)保存程序的运行结果,并结合程序进行分析。
作业内容:
1、建立一颗含有10个结点的二叉查找树;
2、在已建立的二叉查找树上查找一符合给定元素值的结点是否存在。
*3、利用二分查找法在一个含有20个整数的有序表中插入一个元素,并保持表的有序性。