数据结构实验报告Word下载.docx

上传人:b****6 文档编号:21621706 上传时间:2023-01-31 格式:DOCX 页数:53 大小:369.70KB
下载 相关 举报
数据结构实验报告Word下载.docx_第1页
第1页 / 共53页
数据结构实验报告Word下载.docx_第2页
第2页 / 共53页
数据结构实验报告Word下载.docx_第3页
第3页 / 共53页
数据结构实验报告Word下载.docx_第4页
第4页 / 共53页
数据结构实验报告Word下载.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

数据结构实验报告Word下载.docx

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

数据结构实验报告Word下载.docx

3。

6.实验收获及思考

学会运用建立链表解决实际问题。

7.源代码

#include<

iostream.h>

/*#include<

algorithm>

*/

usingnamespacestd;

typedefstructLNode

structLNode*next;

}LNode,*LinkList;

intmain()

intm,n;

inti;

intnum;

i=1;

num=0;

//cout<

<

"

******约瑟夫环问题******"

endl;

cout<

请输入总人数n:

;

cin>

>

n;

请输入密码m:

m;

LinkListfirst,p,q;

first=(LinkList)malloc(sizeof(LNode));

first->

data=i;

p=first;

while(i!

=n)

{

i+=1;

q=(LinkList)malloc(sizeof(LNode));

q->

p->

next=q;

p=p->

next;

}

p->

next=first;

while

(1)

i=1;

while(i<

m-1)

{

p=p->

i++;

}

if(p->

next==p)

cout<

第"

n<

个出圈的人的号为:

p->

data<

break;

else

++num;

num<

next->

p->

next=p->

system("

pause"

);

return0;

}

第三章迷宫问题

设计性实验

1.问题描述

迷宫四周设为墙;

无填充处,为可通处。

设每个点有四个可通方向,分别为东、南、西、北。

左上角为入口。

右下角为出口。

迷宫有一个入口,一个出口。

设计程序求解迷宫的一条通路。

2.数据结构设计

设置迷宫,最外围1为墙里边0为可走路径1为障碍

{1,1,1,1,1,1,1,1},

{1,0,0,1,0,0,0,1},

{1,1,0,0,0,0,0,1},

{1,0,0,1,0,1,0,1},

{1,0,0,0,0,0,0,1},

{1,1,1,1,1,1,1,1}

定义指针,设置方向,上下左右。

find为设置找不找得到路

lj[top].x=1;

lj[top].y=1;

migong[1][1]=-1;

find=0;

d=-1;

3.算法设计

循环语句,从起点查找开始路径,可走就继续进入下一格子。

if(lj[top].x==4&

&

lj[top].y==6)

迷宫路径如下:

开始->

for(inti=0;

i<

=top;

i++)

("

lj[i].x<

"

lj[i].y<

)"

->

"

//把找到的路径输出

num++;

if(num%6==0)

结束!

d=4;

判断是否找得到

if(find==1){

lj[top].d=d;

top++;

lj[top].x=x;

lj[top].y=y;

d=-1;

migong[x][y]=-1;

4.运行、测试与分析

运行程序:

5.实验收获及思考

学会用顺序栈,队列解决实际问题。

6.源代码

iostream>

intmigong[6][8]=//设置迷宫,最外围1为墙里边0为可走路径1为障碍

{1,1,1,1,1,1,1,1}

intnum;

struct

intx,y,d;

}lj[48];

//x,y分别为垂直和水平方向

voidstart()

inttop=0,x,y,d,find;

//d为设置方向,上下左右。

while(top>

-1){

if(lj[top].x==4&

while(d<

4&

find==0){

d++;

switch(d){

case0:

x=lj[top].x-1;

y=lj[top].y;

break;

//方向为上

case1:

x=lj[top].x;

y=lj[top].y+1;

break;

//方向为右

case2:

x=lj[top].x+1;

//方向为下

case3:

y=lj[top].y-1;

}//方向为左

if(migong[x][y]==0)

find=1;

if(find==1){//判断是否找得到

//重新调整方向

else{

migong[lj[top].x][lj[top].y]=0;

top--;

d=lj[top].d;

//找不到的话退栈

start();

第三章火车重拍问题

一列货运列车共有n节车厢,每节车厢将停放在不同的车站。

假定n个车站的编号分别为1~n,即货运列车按照第n站至第1站的次序经过这些车站。

为了便于从列车上卸掉相应的车厢,车厢的编号应与车站的编号相同,这样,在每个车站只要卸掉最后一节车厢。

所以,给定任意次序的车厢,必须重新排列它们。

车厢的重排工作可以通过转轨站完成。

在转轨站中有一个入轨、一个出轨和k个缓冲轨,缓冲轨位于入轨和出轨之间。

假定缓冲轨按先进先出的方式运作,设计算法解决火车车厢重排问题。

创建头指针和尾指针。

typedefstruct

QueuePtrfront;

//头指针,若队列不空,指向队列头元素

QueuePtrrear;

//尾指针,若队列不空,指向队列尾元素的下一个位置

}LinkQueue;

构造一个空队列Q:

intInitQueue(LinkQueue&

Q)//{

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!

Q.front)return0;

//存储分配失败

Q.front->

next=NULL;

return1;

voidResort(LinkQueue&

Q,intb[],LinkQueue*H,intk)//火车车厢重排

intnowOut=1,no=1,p=0;

while(nowOut<

10)

intflag=0,flag2=0;

//车厢出轨标记初始化为0

intc=DeQueue(Q);

if(c==nowOut)

c<

直接出栈"

b[p]=c;

p++;

nowOut++;

flag=1;

for(intj=0;

j<

k;

j++)//输出对头元素

if(IsEmpty(H[j]))

if(Getfront(H[j])==nowOut)

{

intm=DeQueue(H[j]);

cout<

m<

从第"

个缓冲栈出来!

b[p]=m;

j=0;

}}}

4.运行、测试与分析

输入进队列顺序369247185

缓冲轨数为3

5.源代码

stdlib.h>

typedefstructQNode

structQNode*next;

}QNode,*QueuePtr;

Q)//构造一个空队列Q

{Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

intEnQueue(LinkQueue&

Q,inte)//插入元素e为Q的新的队尾元素

{

QueuePtrp;

p=(QueuePtr)malloc(sizeof(QNode));

if(!

p)return0;

//队列满

data=e;

next=NULL;

Q.rear->

next=p;

Q.rear=p;

intDeQueue(LinkQueue&

Q)//若队列不空,则删除Q的队头元素,用e返回其值,并返回1;

否则返回0

if(Q.front==Q.rear)return0;

else

{

p=Q.front->

if(p->

next==NULL)

Q.front=Q.rear;

intm=p->

data;

free(p);

returnm;

intGetfront(LinkQueue&

Q)//取队头元素

if(Q.front==Q.rear)return0;

returnQ.front->

intGetrear(LinkQueue&

Q)//取队尾元素

returnQ.rear->

intIsEmpty(LinkQueue&

Q)//判断队列为空

if(Q.front==Q.rear)

}

if(flag==0)//插入新的缓冲队列

for(inti=0;

if(IsEmpty(H[i]))

{

intn=Getrear(H[i]);

if(c>

{

cout<

输入到第"

个缓冲栈!

EnQueue(H[i],c);

flag2=1;

}

}

}

if(flag2==0)

if(no==k)

cout<

缓冲队列已用完,无法输出"

else

cout<

no<

EnQueue(H[no],c);

no++;

LinkQueueQ,H[9];

intk,a[9],b[9];

InitQueue(Q);

请输入你需要的缓冲队列个数:

InitQueue(H[i]);

请输入火车入轨的编号序列:

9;

j++)

cin>

a[j];

EnQueue(Q,a[j]);

火车车厢重排序列为:

Resort(Q,b,H,k);

b[i]<

system("

第五章魔方阵

魔方阵是一个古老的智力问题,它要求在一个m×

m的矩阵中填入1~m2的数字(m为奇数),使得每一行、每一列、每条对角线的累加和都相等,如图1所示。

15

8

1

24

17

16

14

7

5

23

22

20

13

6

4

3

21

19

12

10

9

2

25

18

11

inta[16][16],i,j,k,p,n;

//定义魔方阵最大结构,设置循环变量。

p=1;

判断是否在规定的范围内,而且要求输入的是奇数。

if((n!

=0)&

(n<

=15)&

(n%2!

=0))

由三阶魔方阵的生成过程可知,某一位置(x,y)的左上角的位置是(x-1,y-1),如果x-1≥0,不用调整,否则将其调整为x-1+m;

同理,如果y-1≥0,不用调整,否则将其调整为y-1+m。

所以,位置(x,y)的左上角的位置可以用求模的方法获得,即:

x=(x-1+m)%m

y=(y-1+m)%m

for(i=1;

=n;

for(j=1;

a[i][j]=0;

j=n/2+1;

a[i][j]=1;

for(k=2;

k<

=n*n;

k++)

i=i-1;

j=j+1;

if((i<

1)&

(j>

n))

i=i+2;

j=j-1;

测试用例,输入奇数3和5:

实验中遇到问题自己想办法解决可以提高很快啊。

#include<

stdio.h>

inta[16][16],i,j,k,p,n;

while(p==1)

printf("

enter奇数n:

scanf("

%d"

&

n);

if((n!

p=0;

for(i=1;

else

if(i<

1)i=n;

if(j>

n)j=1;

if(a[i][j]==0)

a[i][j]=k;

a[i][j]=k;

for(i=1;

%5d"

a[i][j]);

\n\n"

第六章二叉链表

1.问题描述

●二叉链表的C语言描述

●基本运算的算法——建立二叉链表、先序遍历二叉树、中序遍历二叉树、后序遍历二叉树、后序遍历求二叉树深度

2.数据结构设计

在建立二叉树时,我选用结构体来建立。

typedefstructbitnode

chardata;

structbitnode*lchild;

structbitnode*rchild;

}bitnode,*bitree;

3.算法设计

先后设计了先序遍历,中序遍历,后序遍历以及深度的算法。

voidpreordertraverse(bitree&

t)

if(t)

printf("

%c"

t->

data);

preordertraverse(t->

lchild);

rchild);

voidinordertraverse(bitree&

inordertraverse(t->

voidpostordertraverse(bitree&

postordertraverse(t->

intdepth(bitree&

intdepthval,depthleft,depthright;

if(!

depthval=0;

depthleft=depth(t->

depthright=depth(t->

depthval=1+(depthleft>

depthright?

depthleft:

depthright);

returndepthval;

4.运行、测试

//数据结构实验6源代码

malloc.h>

string.h>

//建立二叉树

typedefstructbitnode{

//初始化二叉树

voidcreatebitree(bitree&

t){

charch;

scanf("

ch);

if(ch=='

'

t=NULL;

return;

t=(bitnode*)malloc

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

当前位置:首页 > 表格模板 > 书信模板

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

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