数据结构 实验报告 全.docx

上传人:b****5 文档编号:4285157 上传时间:2022-11-28 格式:DOCX 页数:13 大小:17.54KB
下载 相关 举报
数据结构 实验报告 全.docx_第1页
第1页 / 共13页
数据结构 实验报告 全.docx_第2页
第2页 / 共13页
数据结构 实验报告 全.docx_第3页
第3页 / 共13页
数据结构 实验报告 全.docx_第4页
第4页 / 共13页
数据结构 实验报告 全.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构 实验报告 全.docx

《数据结构 实验报告 全.docx》由会员分享,可在线阅读,更多相关《数据结构 实验报告 全.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构 实验报告 全.docx

数据结构实验报告全

河南省高等教育自学考试

实验报告册

计算机及应用专业(本科段)

《数据结构》

 

姓名准考证号所属地市

实验地点实验日期

实验总成绩指导教师签名

实验单位(实验室)意见:

主考院校审核意见:

 

河南科技大学自学考试办公室

二零一零年三月

实验一单链表的操作

【需求分析】

掌握线性表在链式存储结构下各种算法的实现。

●功能

1.建立一个数据域存放的是字符串的单链表;

2.输入一个指定的字符串,插入到单链表的指定位置;

3.删除单链表中指定的字符串;

4.遍历单链表。

●输入要求

输入n个字符串(长度小于6),建立含有n个结点的单链表,要求输入的字符串不重复。

●测试数据

建立时:

n=5

redgreenyellowblueblack

插入时:

orange(在第5个结点之后插入)

删除时:

blue

【概要设计】

1.设定结点的类型定义:

typedefstructnode{

chardata[8];

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"

#include"stdlib.h"

#include"string.h"

#defineN5

typedefstructnode{

chardata[8];

structnode*next;

}Listnode;

/*******函数调用说明*******/

Listnode*CreateL();

Listnode*Getnode();

voidTraveL();

voidInsertL();

voidDeleteL();

/*******************主函数************************/

main()

{intk,j;

Listnode*head,*p;

printf(“建立单链表:

\n”);

head=CreateL();

do{

printf(”0.退出\n”);

printf("1.遍历单链表\n");

printf("2.单链表的插入\n");

printf("3.单链表的删除\n");

printf("请选择:

");

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);

r->next=s;

r=s;

}

r->next=NULL;

returnhead;

}

/*******************遍历*******************/

voidTraveL(Listnode*head)

{Listnode*p;

p=head->next;;

while(p)

{printf("%s",p->data);

p=p->next;

}

}

/********************插入******************/

voidInsertL(Listnode*head)

{charch[8];

intk;

Listnode*p,*s;

printf(“\n输入要插入的字符串:

”);

scnaf(“%s”,ch);;

printf(“\n输入要插入的位置:

”);

scanf(“%d”,&k);

p=Getnode(head,k-1);

if(p==NULL)

{printf("positionerror!

");exit(0);}

s=(Listnode*)malloc(sizeof(Listnode));

strcpy(s->data,ch);

s->next=p->next;

p->next=s;

}

/********************删除******************/

voidDeleteL(Listnode*head)

{charch[8];

Listnode*p,*q;

printf(“\n输入要删除的字符串:

”);

scnaf(“%s”,ch);;

printf(“\n查找它之前的位置:

”);

p=head;

whiel(p->next)

{q=p->next;

if(!

strcmp(q->data,ch))break;

p=q;

}

if(p->next){p->next=q->next;

free(q);

}

elseprintf(“notfound”);

}

/******************查找*****************/

Listnode*Getnode(Listnode*head,inti)

{intj;

Listnode*p;

p=head;j=0;

while(p->next&&j

{p=p->next;

j++;

}

if(i==j)

returnp;

else

returnNULL;

}

/*************************************************************/

【实验报告】

学生可以根据上述程序在机器上调试运行,并结合自己上机过程中遇到的问题和解决方法的体会,提交实验报告,并写出调试分析过程、程序使用方法和测试结果。

 

实验二数据结构实验二图的深度优先遍历和广度优先遍历

#include

#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;

q->next=NULL;

if(Q==NULL)

return;

if(Q->rear==NULL)

Q->front=Q->rear=q;

else

{

Q->rear->next=q;

Q->rear=Q->rear->next;

}

}

voidDeQueue(QueueList*Q,int*e)

{

if(Q==NULL)

return;

if(Q->front==Q->rear)

{

*e=Q->front->nData;

Q->front=Q->rear=NULL;

}

else

{

*e=Q->front->nData;

Q->front=Q->front->next;

}

}

//创建图

voidCreatAdjList(Graph*G)

{

inti,j,k;

edgenode*p1;

edgenode*p2;

cout<<"请输入顶点数和边数:

"<

cin>>G->vexnum>>G->arcnum;

cout<<"开始输入顶点表:

"<

for(i=0;ivexnum;i++)

{

cin>>G->adjlists[i].vertex;

G->adjlists[i].edgelink=NULL;

}

cout<<"开始输入边表信息:

"<

for(k=0;karcnum;k++)

{

cout<<"请输入边对应的顶点:

";

cin>>i>>j;

p1=newedgenode;

p1->endver=j;

p1->edgenext=G->adjlists[i].edgelink;

G->adjlists[i].edgelink=p1;

p2=newedgenode;

p2->endver=i;

p2->edgenext=G->adjlists[j].edgelink;

G->adjlists[j].edgelink=p2;

//因为是无向图,所以有两次建立边表的过程

}

}

//-------------------------------------------------------------深度优先遍历

voidDFS(Graph*G,inti,intvisit[])

{

cout<adjlists[i].vertex<<"";

visit[i]=1;

edgenode*p=newedgenode;

p=G->adjlists[i].edgelink;

if(G->adjlists[i].edgelink&&!

visit[p->endver])

{

DFS(G,p->endver,visit);

}

}

voidDFStraversal(Graph*G,charc)//深度优先遍历

{

cout<<"该图的深度优先遍历结果为:

"<

intvisit[MaxVerNum];

for(inti=0;ivexnum;i++)

{

visit[i]=0;//全部初始化为0,即未访问状态

}

intm;

for(i=0;ivexnum;i++)

{

if(G->adjlists[i].vertex==c)//根据字符查找序号

{

m=i;

DFS(G,i,visit);

break;

}

}

//继续访问未被访问的结点

for(i=0;ivexnum;i++)

{

if(visit[i]==0)

DFS(G,i,visit);

}

cout<

}

//-------------------------------------------------------------广度优先遍历

voidBFS(Graph*G,intv,intvisit[])

{

QueueList*Q=newQueueList;

Q->front=Q->rear=NULL;

EnQueue(Q,v);

while(Q->rear!

=NULL)

{

inte=0;

DeQueue(Q,&e);

cout<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->endver;

EnQueue(Q,m);

}

}

}

}

}

voidBFStraversal(Graph*G,charc)

{

cout<<"该图的广度优先遍历结果为:

"<

intvisited[MaxVerNum];

for(inti=0;ivexnum;i++)

{

visited[i]=0;

}

intm;

for(i=0;ivexnum;i++)

{

if(G->adjlists[i].vertex==c)

{

m=i;

BFS(G,i,visited);

break;

}

}

//继续访问未被访问的结点

for(i=0;ivexnum;i++)

{

if(visited[i]==0)

BFS(G,i,visited);

}

cout<

}

voidmain()

{

Graph*G=newGraph;

CreatAdjList(G);

charch;

cout<<"请输入开始遍历的顶点:

";

cin>>ch;

DFStraversal(G,ch);

BFStraversal(G,ch);

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1