数据结构上机实验报告四Word文件下载.docx
- 文档编号:22458695
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:11
- 大小:76.24KB
数据结构上机实验报告四Word文件下载.docx
《数据结构上机实验报告四Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构上机实验报告四Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
voidINORDER(BTREET);
voidPOSTORDER(BTREET);
voidLAYERORDER(BTREET);
voidmain()
{inta;
BTREET=NULL;
T=CREATEBT();
/*建立二叉树*/
a=COUNTLEAF(T);
/*统计叶子结点的个数*/
printf("
Thenumberofleavesis:
%d\n"
a);
PREORDER(T);
/*前序遍历*/
\n"
);
INORDER(T);
/*中序遍历*/
POSTORDER(T);
/*后续遍历*/
LAYERORDER(T);
/*层次遍历*/
}
BTREECREATEBT()
{BTREESTACK[MaxSize],p,T=NULL;
charch;
intflag,top=-1;
while
(1)
{scanf("
%c"
&
ch);
/*取广义表中一个元素*/
switch(ch)
{default:
p=(BTREE)malloc(sizeof(BTNode));
p->
data=ch;
lchild=NULL;
rchild=NULL;
/*建立一个新节点*/
if(T==NULL)/*p所指结点为根节点*/
T=p;
elseif(flag==1)
STACK[top]->
lchild=p;
/*p所指结点为根的左孩子*/
else
rchild=p;
/*p所指结点为根的右孩子*/
break;
case'
('
:
STACK[++top]=p;
/*取到左括号,进栈*/
flag=1;
/*置标志1*/
break;
case'
)'
top--;
/*取到右括号,退栈*/
'
flag=2;
/*取到逗号,置标志2*/
@'
return(T);
/*取到结束符合'
*/
}
}
intCOUNTLEAF(BTREET)/*计算叶节点的个数*/
{if(T==NULL)
return0;
if(T->
lchild==NULL&
&
T->
rchild==NULL)
return1;
return(COUNTLEAF(T->
lchild)+COUNTLEAF(T->
rchild));
voidPREORDER(BTREET)
{if(T!
=NULL)
{
printf("
%c"
T->
data);
/*访问T所指结点*/
PREORDER(T->
lchild);
/*遍历T所指结点的左子树*/
rchild);
/*遍历T所指结点的右子树*/
voidINORDER(BTREET)
{INORDER(T->
printf("
INORDER(T->
voidPOSTORDER(BTREET)
{POSTORDER(T->
POSTORDER(T->
voidLAYERORDER(BTREET)
{BTREEQUEUE[MaxSize],p;
intfront,rear;
if(T!
{QUEUE[0]=T;
/*根结点进队*/
front=-1;
/*队头指针初始化*/
rear=0;
/*队尾指针初始化*/
while(front<
rear)
{p=QUEUE[++front];
/*访问根结点*/
printf("
p->
if(p->
lchild!
=NULL)/*左孩子不为空*/
QUEUE[++rear]=p->
lchild;
/*左孩子进队*/
rchild!
=NULL)/*右孩子不为空*/
rchild;
/*右孩子进队*/
运行结果:
调试总结:
1)二叉树的建立;
2)遍历时的递归算法;
图
从图中指定顶点v出发,访问v以后依次访问v的各个未被访问的邻接点,然后从邻接点出发按照同样的原则依次访问未被访问过的点·
·
直到图中所有的点都被访问过。
因此,实现此过程需要设置一个队列结构。
#defineN20
#defineM100
#include<
typedefstructgraph_edge
{intadjvex;
structgraph_edge*next;
}ELink;
/*定义边的数据类型*/
typedefstructgraph_node
{charvertex[5];
structgraph_edge*link;
}NLink;
/*定义顶点的数据类型*/
voidCREATGRAPH(NLinkNode[N],intn,inte);
voidTRAVERSE_BFS(NLinkNode[N],intQUEUE[],intn);
voidBFS(NLinkNode[N],intQUEUE[],intk);
intADDQUEUE(intQUEUE[],intk);
intDELQUEUE(intQUEUE[]);
intEMPTYQUEUE();
intfront=-1;
/*定义全局变量,对队头初始化*/
intrear=-1;
/*定义全局变量,对队尾进行初始化*/
{NLinkNode[N];
intn,e;
intQUEUE[M]={0};
/*构造队列,赋值为0*/
请输入顶点个数n\n"
/*输入顶点个数*/
scanf("
%d"
n);
请输入表示边的顶点偶对个数e\n"
/*输入边的顶点偶对的个数,无向图为边数的两倍*/
e);
CREATGRAPH(Node,n,e);
/*建立图*/
TRAVERSE_BFS(Node,QUEUE,n);
/*广度搜索*/
voidCREATGRAPH(NLinkNode[N],intn,inte)
{ELink*p,*q;
inti,j,k;
for(i=0;
i<
n;
i++)
{
请输入顶点的数据信息\n"
/*输入顶点名称*/
scanf("
%s"
Node[i].vertex);
Node[i].link=NULL;
/*把顶点的指针域清零*/
for(k=0;
k<
e;
k++)
{printf("
输入边的两顶点下标值\n"
/*输入顶点对应下标值*/
%d,%d"
i,&
j);
p=(ELink*)malloc(sizeof(ELink));
p->
adjvex=j;
/*建立边表*/
next=NULL;
if(!
Node[i].link)
{Node[i].link=p;
/*建立顶点与边的链接*/
}
else
{q=Node[i].link;
while(q->
next)/*顶点的第一个邻接点指针域不空*/
q=q->
next;
/*指向下一个结点*/
q->
next=p;
/*建立第一个结点与该结点的链接*/
voidTRAVERSE_BFS(NLinkNode[N],intQUEUE[],intn)
{inti;
intvisited[M];
visited[i]=0;
/*标记数组赋初值(清零)*/
if(visited[i]==0)
BFS(Node,QUEUE,i,visited);
voidBFS(NLinkNode[N],intQUEUE[],intv,intvisited[M])
{ELink*p;
if(!
visited[v])
nodevisited:
%s\n"
Node[v].vertex);
/访问顶点v*/
visited[v]=1;
/*顶点v对应的访问标记置为1*/
ADDQUEUE(QUEUE,v);
//访问过的顶点K入队
while(!
EMPTYQUEUE())
{v=DELQUEUE(QUEUE);
/*退出队头元素送i*/
p=Node[v].link;
/*访问v的邻接点*/
while(p!
{
visited[p->
adjvex])
{
printf("
Node[p->
adjvex].vertex);
/*把邻接点打印出来*/
visited[p->
adjvex]=1;
ADDQUEUE(QUEUE,p->
adjvex);
/*把V的邻接点入队*/
p=p->
//访问v的下一个邻接点
intADDQUEUE(intQUEUE[],intk)
{if((rear+1)%M==front)
return0;
/*循环队列已满,插入失败,返回0*/
else
{QUEUE[++rear%M]=k;
/*循环队列未满,插入成功,返回1*/
intDELQUEUE(intQUEUE[])
{intitem=0;
if(front==rear)
/*循环队列为空,删除失败,返回0*/
{front=(front+1)%M;
item=QUEUE[front];
returnitem;
/*循环队列未空,删除成功,返回1*/
intEMPTYQUEUE()
{returnfront==rear;
1)图的邻接表存储;
2)图的广度优先遍历。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 上机 实验 报告