数据结构课程设计

发布 2022-10-01 21:35:28 阅读 7776

课程设计(数据结构)

院、系专业。

姓名学号。指导教师。

2010 年月日。

树的应用。摘要:

关键词:树;二叉树;转换;遍历;递归和非递归。

1.实验题目

实现树与二叉树的转换的实现。以及树的前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现。

2.实验分析。

2.1总体分析。

2.1.1本程序的功能是对任意二叉树进行递归前序遍历和后序遍历,用栈实现非递归的前序、和后序遍历,还有对树的层序遍历以及树与二叉树的转换。

2.1.2本程序要求用户以字符输入,若要实现终端结点,最后以回车键建入数据。

2.1.3本程序的结果将依次打印出递归前序遍历和后序遍历,用栈实现非递归的前序和中序遍历和后序遍历,和线索化层序遍历,输入树及树传换成二叉树。

2.2具体分析。

2.2.1二叉树创建。

用链表实现创建一个树结点的结构体,从键盘输入数据,存入数组。把下标为2*i+1 的值存入左孩子,为2*i+2的存入右孩子。 binode creat(),binode stree_creat(char *a,int k)。

2.2.2先序遍历二叉树的递归算法。

若二叉树为空,则空操作;否则(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。void preorder(binode root)。

2.2.3中序遍历二叉树的递归算法。

若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。void inorder(binode root)。

2.2.4后序遍历二叉树的递归算法。

若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树。(3)访问根结点;void postorder(binode root)。

2.2.5先序非递归算法。

binode根指针,若 binode!= null对于非递归算法,引入栈模拟递归工作栈,初始时栈为空。

问题:如何用栈来保存信息,使得在先序遍历过左子树后,能利用栈顶信息获取 binode的右子树的根指针?void f_preorder(binode root)

2.2.6中序非递归算法。

binode是要遍历树的根指针,中序遍历要求在遍历完左子树后,访问根,再遍历右子树。

问题:如何用栈来保存信息,使得在中序遍历过左子树后,能利用栈顶信息获取binode指针?void f_inorder(binode root)。

2.2.7后序非递归算法。

binode是要遍历树的根指针,后序遍历要求在遍历完左右子树后,再访问根。需要判断根结点的左右子树是否均遍历过。void f_postorder(binode root)。

2.2.8层次序遍历算法。

按照树的层次从左到右访问树的结点,层序遍历用于保存结点的容器是队列。void levelorder(binode root)。

2.2.9树与二叉树的转换算法。

转换时结点的第一个孩子变为它的左孩子,兄弟节点变为他的有孩子。void exchange(),class tree.

3.实验步骤。

3.1流程图。

图 1、二叉树的创建。

图2、前序递归遍历。

图3、中序递归遍历。

图4、后序递归遍历。

图5、前序非递归遍历。

图6、中序非递归遍历。

图7、后序非递归遍历。

图8、层序遍历。

3.2**:

#include

using namespace std;

#include<>

#include<>

#define maxsize 100

#include ""

#define len sizeof(struct btree)

int max=1;

typedef struct btree //二叉树节点结构体。

btree *lchild,*rchild;

char data;

*binode;

typedef struct stackelemtype//栈的结构体。

binode ptr;

int flag;

stackelemtype;

binode p ;

/二叉树的建立。

binode stree_creat(char *a,int k)

binode root; max++;

if(a[k]==0'||k>maxsize)

return null; /判断树是否为空。

else root=(binode)malloc(len);/动态申请节点。

root->data=a[k];

root->lchild=stree_creat(a,2*k+1); 递归调用为左孩子赋值。

root->rchild=stree_creat(a,2*k+2); 递归调用为右子赋值。

return root;//返回根节点指针。

void print(binode root) /输出所创建的二叉树。

binode h[maxsize]=;

int top=0,base=0,j=0,k=0,n=0,m=0;

h[top]=root;

j=log(max+1)/log(2)-1;

if(pow(2,j+1)-1 cout<<"你刚输入的是:";

while(h[base]!=null) /把二叉树的值依次存入数组。

h[++top]=h[base]->lchild;

h[++top]=h[base]->rchild;

base++;

for(top=0;h[k]!=null;top++)按层输出。

cout<<"n";

for(n=0;n<(m-1);n++)

cout<<"

for(base=0;basecout<<"

cout<<"n";

//二叉树的后序遍历递归算法。

void postorder(binode root)

if(root==null)return;//递归调用的约束条件。

elsepostorder(root->lchild);

postorder(root->rchild);

if(root->data=='0')

else cout<<"data<<"

/二叉树的中序遍历递归算法。

void inorder(binode root)

if(root==null)return;//递归调用的约束条件。

elseinorder(root->lchild);

if(root->data=='0')

else cout<<"data<<"

inorder(root->rchild);

/二叉树的前序递归遍历算法。

void preorder(binode root)while(root!=null||top>0);

/中序非递归遍历算法。

void f_inorder(binode root)

binode s[maxsize]; 申请一个binode数组。

int top=0; /采用顺序栈,并假定不会发生上溢。

do{while(root!=null) /当结点不为空时。

s[++top] =root; /依次将结点压入栈。

root = root->lchild; /根赋值为它的左孩子。

if(top>0) /当节点为空但栈顶不为零时。

root = s[top]; 把栈顶元素负给根结点。

if(root->data=='0')

else cout<<"data<<"输出根结点。

数据结构课程设计

课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...

数据结构课程设计

数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...

数据结构课程设计

班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...