算法于数据结构 河海大学文天学院
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法与数据结构》
课程设计报告
学号
姓名
班级计算机
指导教师
河海大学文天学院
2014年6 月
课题一:二叉树的各种算法
一、目的
1、掌握二叉树的所有算法
2、熟悉计算机英语和术语
3、会写课本上已有的算法之后,可以借其思想进行扩展,逐步提高编程能力。巩固和加深对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的理解。
二、实习环境
个人计算机,Windows操作系统,Turbo C 2.0或 WinTC或Visual C++等编译开发环境三、实习内容与步骤
内容
1、创建二叉树
2、用递归方法实现二叉树的各种遍历
步骤
开始——>用前序输入法构造一颗二叉树——>用中序输入法构造一颗二叉树——>用后序输入法构造一颗二叉树——>用非递归前序输入法构造一颗二叉树——>用非递归中序输入法构造一颗二叉树——>用非递归后序输入法构造一颗二叉树——>释放二叉树——>结束
四、程序代码:
#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100
typedef char DataType;
typedef struct bnode {
DataType data;
struct bnode *lchild, *rchild;
} Bnode, *BTree;
typedef struct {
BTree data[MAXSIZE];
int top;
}SeqStack, *PSeqStack;
PSeqStack Init_SeqStack()
{
PSeqStack S;
S=(PSeqStack)malloc(sizeof(SeqStack));
if (S)
S->top=-1;
return S;
}
int Empty_SeqStack(PSeqStack S)
{
if (S->top==-1)
return 1;
else
return 0;
}
int Push_SeqStack (PSeqStack S,BTree x)
{
if (S->top==MAXSIZE-1) return 0;
else {
S->top++; S->data[S->top]=x;
return 1;
}
}
int Pop_SeqStack(PSeqStack S , BTree *x)
{
if (Empty_SeqStack ( S ) )
return 0;
else {
*x=S->data[S->top]; S->top--;
return 1;
}
}
int GetTop_SeqStack(PSeqStack S, BTree *x)
{
if ( Empty_SeqStack ( S ) ) return 0;
else {
*x= S->data[S->top];
return (1);
}
}
BTree CreateBinTree()
{
char ch; BTree t;
ch=getchar();
if (ch=='#') t=NULL;
else
{
t=(BTree)malloc(sizeof(Bnode));
t->data=ch;
t->lchild=CreateBinTree();
t->rchild=CreateBinTree();
}
return t;
}
#define MAXSIZE 100
typedef struct {
BTree data[MAXSIZE];
int front, rear;
}SeqQueue,*PSeqQueue;
PSeqQueue Init_SeqQueue( )
{
PSeqQueue Q;
Q=( PSeqQueue )malloc(sizeof(SeqQueue));
if (Q) {
Q->front=0;
Q->rear=0;
}
return Q;
}
int Empty_SeqQueue(PSeqQueue Q)
{ if (Q && Q->front==Q->rear)
return (1);
else
return (0);
}
int In_SeqQueue ( PSeqQueue Q , BTree x)
{
if ((Q->rear+1)%MAXSIZE==Q->front)
{ printf("对满");
return -1;
}
else
{ Q->rear=(Q->rear+1) % MAXSIZE;
Q->data[Q->rear]=x;
return 1;
}
}
int Out_SeqQueue (PSeqQueue Q,BTree *x)
{
if (Empty_SeqQueue(Q)) {
printf("对空");
return -1;
}
else
{ Q->front=(Q->front+1) % MAXSIZE;