数据结构 实验报告 全Word格式.docx
- 文档编号:17203970
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:13
- 大小:17.54KB
数据结构 实验报告 全Word格式.docx
《数据结构 实验报告 全Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构 实验报告 全Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
structnode*next;
}Listnode;
2.设定头指针变量:
Listnode*head;
3.本程序包括六个函数:
1main()
设计用户界面和菜单,并调用其它五个函数。
2Listnode*CreateL()
输入N个字符串,动态建立一个带头结点的单链表,并返回头结点的地址指针。
3voidTravelL(Listnode*head)
遍历带头结点的单链表,输出每个结点的值。
4Listnode*GetNode(Listnode*head,inti)
在带头结点的单链表中查找第I个元素,若找到,则返回该结点的存储位置,即地址指针;
否则返回NULL。
5voidInsertL(Listnode*head,charx[],inti)
在带头结点的单链表的第I个位置之后插入一个字符串x
6voidDeleteL(Listnode*head,inti)
删除带头结点的单链表的第I个元素的函数。
【详细设计】
/*******************LinkList******************************/
#include"
stdio.h"
stdlib.h"
string.h"
#defineN5
typedefstructnode{
chardata[8];
/*******函数调用说明*******/
Listnode*CreateL();
Listnode*Getnode();
voidTraveL();
voidInsertL();
voidDeleteL();
/*******************主函数************************/
main()
{intk,j;
Listnode*head,*p;
printf(“建立单链表:
\n”);
head=CreateL();
do{
printf(”0.退出\n”);
printf("
1.遍历单链表\n"
);
2.单链表的插入\n"
3.单链表的删除\n"
请选择:
"
scanf(“%d”,&
k);
switch(k)
{case0:
exit(0);
case1:
TravelL(head);
break;
case2:
InsertL(head);
break;
case3:
DeleteL(head);
}
}while
(1);
/*******************建立********************/
Listnode*CreateL()
{intj;
Listnode*head,*s,*r;
head=(Listnode*)malloc(sizeof(Listnode));
r=head;
r->
next=NULL;
printf(“\n请输入%d个字符串:
”,N);
for(j=1;
j<
=N;
j++)
{printf(“字符串%d:
“,j);
s=(Listnode*)malloc(sizeof(Listnode));
scanf(“%s”,s->
data);
next=s;
r=s;
}
returnhead;
/*******************遍历*******************/
voidTraveL(Listnode*head)
{Listnode*p;
p=head->
next;
;
while(p)
{printf("
%s"
p->
p=p->
/********************插入******************/
voidInsertL(Listnode*head)
{charch[8];
intk;
Listnode*p,*s;
printf(“\n输入要插入的字符串:
”);
scnaf(“%s”,ch);
printf(“\n输入要插入的位置:
p=Getnode(head,k-1);
if(p==NULL)
positionerror!
s=(Listnode*)malloc(sizeof(Listnode));
strcpy(s->
data,ch);
s->
next=p->
p->
/********************删除******************/
voidDeleteL(Listnode*head)
Listnode*p,*q;
printf(“\n输入要删除的字符串:
printf(“\n查找它之前的位置:
p=head;
whiel(p->
next)
{q=p->
if(!
strcmp(q->
data,ch))break;
p=q;
if(p->
next){p->
next=q->
free(q);
elseprintf(“notfound”);
/******************查找*****************/
Listnode*Getnode(Listnode*head,inti)
Listnode*p;
p=head;
j=0;
while(p->
next&
&
i)
{p=p->
j++;
if(i==j)
returnp;
else
returnNULL;
/*************************************************************/
【实验报告】
学生可以根据上述程序在机器上调试运行,并结合自己上机过程中遇到的问题和解决方法的体会,提交实验报告,并写出调试分析过程、程序使用方法和测试结果。
实验二数据结构实验二图的深度优先遍历和广度优先遍历
#include<
iostream.h>
#defineMaxVerNum50
structedgenode
{
intendver;
intinform;
edgenode*edgenext;
};
structvexnode
charvertex;
edgenode*edgelink;
structGraph
vexnodeadjlists[MaxVerNum];
intvexnum;
intarcnum;
//队列的定义及相关函数的实现
structQueueNode
intnData;
QueueNode*next;
structQueueList
QueueNode*front;
QueueNode*rear;
voidEnQueue(QueueList*Q,inte)
QueueNode*q=newQueueNode;
q->
nData=e;
if(Q==NULL)
return;
if(Q->
rear==NULL)
Q->
front=Q->
rear=q;
{
rear->
next=q;
rear=Q->
voidDeQueue(QueueList*Q,int*e)
if(Q==NULL)
if(Q->
front==Q->
rear)
*e=Q->
front->
nData;
rear=NULL;
//创建图
voidCreatAdjList(Graph*G)
inti,j,k;
edgenode*p1;
edgenode*p2;
cout<
<
请输入顶点数和边数:
endl;
cin>
>
G->
vexnum>
arcnum;
开始输入顶点表:
for(i=0;
i<
vexnum;
i++)
cin>
adjlists[i].vertex;
G->
adjlists[i].edgelink=NULL;
开始输入边表信息:
for(k=0;
k<
k++)
cout<
请输入边<
Vi,Vj>
对应的顶点:
i>
j;
p1=newedgenode;
p1->
endver=j;
edgenext=G->
adjlists[i].edgelink;
adjlists[i].edgelink=p1;
p2=newedgenode;
p2->
endver=i;
adjlists[j].edgelink;
adjlists[j].edgelink=p2;
//因为是无向图,所以有两次建立边表的过程
//-------------------------------------------------------------深度优先遍历
voidDFS(Graph*G,inti,intvisit[])
adjlists[i].vertex<
"
visit[i]=1;
edgenode*p=newedgenode;
p=G->
if(G->
adjlists[i].edgelink&
!
visit[p->
endver])
{
DFS(G,p->
endver,visit);
voidDFStraversal(Graph*G,charc)//深度优先遍历
该图的深度优先遍历结果为:
intvisit[MaxVerNum];
for(inti=0;
visit[i]=0;
//全部初始化为0,即未访问状态
intm;
if(G->
adjlists[i].vertex==c)//根据字符查找序号
{
m=i;
DFS(G,i,visit);
break;
}
//继续访问未被访问的结点
for(i=0;
if(visit[i]==0)
//-------------------------------------------------------------广度优先遍历
voidBFS(Graph*G,intv,intvisit[])
QueueList*Q=newQueueList;
Q->
EnQueue(Q,v);
while(Q->
rear!
=NULL)
inte=0;
DeQueue(Q,&
e);
adjlists[e].vertex<
visit[e]=1;
edgenode*p=newedgenode;
p=G->
adjlists[e].edgelink;
if(p)
intm=p->
endver;
if(m==0)
{
EnQueue(Q,m);
while(visit[m]==0)
{
p=p->
edgenext;
if(p==NULL)
break;
m=p->
EnQueue(Q,m);
}
}
voidBFStraversal(Graph*G,charc)
该图的广度优先遍历结果为:
intvisited[MaxVerNum];
for(inti=0;
visited[i]=0;
adjlists[i].vertex==c)
BFS(G,i,visited);
if(visited[i]==0)
voidmain()
Graph*G=newGraph;
CreatAdjList(G);
charch;
请输入开始遍历的顶点:
ch;
DFStraversal(G,ch);
BFStraversal(G,ch);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验报告 实验 报告