数据结构实验题.docx

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

数据结构实验题.docx

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

数据结构实验题.docx

数据结构实验题

数据结构作业题

version1.0

SpadesQ,SunYat-senUniversity

目录

数据结构作业题1

线性表2

移动小球2

Wire_Routing(随机迷宫,最短路径)5

Ackermann9

递归方法9

数组方法:

可能会有bug,建议迫不得已再使用9

栈方法10

杨辉三角11

迭代法11

数组12

阶乘13

6种排序(冒泡,插入,选择,rank,归并,快速)13

三种查找(顺序,二分1,二分2)17

拓扑排序(宽度,深度)19

‘邻接表’存储模板(标准模板库list不好用,换堆栈/队列)19

实际问题:

车间作业调度(邻接矩阵)20

最小生成树(prim)23

线性表

移动小球

#include

usingnamespacestd;

structNode{

intentry;

Node*next;

Node();

Node(intitem,Node*add_on=NULL);

};

Node:

:

Node()

{

next=NULL;

}

Node:

:

Node(intitem,Node*add_on)

{

entry=item;

next=add_on;

}

classList{

public:

List();

Node*retrieve(intposition)const;

voidinsert(intposition,constint&x);

voidremove(inttarget);

intsequential_search(constint&target);

private:

intcount;

Node*head;

};

List:

:

List()

{

head=NULL;

count=0;

}

Node*List:

:

retrieve(intposition)const

{

Node*q=head;

for(inti=0;i

q=q->next;

returnq;

}

voidList:

:

insert(intposition,constint&x)

{

Node*previous,*following,*newnode;

if(position>0){

previous=retrieve(position-1);

following=previous->next;

}

elsefollowing=head;

newnode=newNode(x,following);

if(position==0)

head=newnode;

else

previous->next=newnode;

count++;

}

voidList:

:

remove(inttarget)

{

Node*prior,*current;

if(sequential_search(target)>0){

prior=retrieve(sequential_search(target)-1);

current=prior->next;

prior->next=current->next;

}

else{

current=head;

head=head->next;

}

deletecurrent;

count--;

}

intList:

:

sequential_search(constint&target)//sequentialsearch

{

intdata;

for(intposition=0;position

data=retrieve(position)->entry;

if(data==target)returnposition;

}

}

intmain()

{

inttask_number,number,com;

intcontrol,x,y;

intposition;

Listl;

cin>>task_number;

for(inti=0;i

{

cin>>number>>com;

for(intj=number;j>0;j--)

{

l.insert(0,j);

}

for(intk=0;k

{

cin>>control>>x>>y;

l.remove(x);

position=l.sequential_search(y);

if(control==1)l.insert(position-1,x);

elseif(control==2)l.insert(position+1,x);

}

for(j=0;j

{

cout<entry<<'';

}

cout<

}

return0;

}

Wire_Routing(随机迷宫,最短路径)

#include

#include

#include

#include

usingnamespacestd;

structposition//位置

{

introw;

intcol;

};

voiddisplay(intsize,int**grid);

intmain()

{

/*****************************产生随机MAZE,并显示************************************/

intsize,i,j,p,q,m,n;

int**grid;

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|

FOREGROUND_GREEN|FOREGROUND_BLUE);//白色

cout<<"pleaseenterthesize(边长)ofsquare!

(size<100)"<

cin>>size;

grid=newint*[size+2];//动态创建二维数组

for(i=0;i

{

grid[i]=newint[size+2];//这个指针数组的每个指针元素又指向一个数组。

}

for(i=0;i

{

grid[i][0]='y';grid[0][i]='y';

grid[size+1][i]='y';grid[i][size+1]='y';

}

srand((unsigned)time(NULL));//以时间为随机种子

for(i=1;i<=size;i++)

{

for(j=1;j<=size;j++)

{

if(1==rand()%10)//10%摡率达成

grid[i][j]='y';

else

grid[i][j]=0;

}

}

p=rand()%size+1;

q=rand()%size+1;//随机起点、终点

grid[p][q]='g';

m=rand()%size+1;

n=rand()%size+1;

grid[m][n]='r';

display(size,grid);

/**********************************找路********************************

把nbr都压入queue,一个一个弹出在找一下nbr,再压入,直到终点**********************/

positionoffset[4];//方向

offset[0].row=1;offset[0].col=0;//right

offset[1].row=0;offset[1].col=-1;//down

offset[2].row=-1;offset[2].col=0;//left

offset[3].row=0;offset[3].col=1;//up

positionhere;

positionnbr;

positionfinish;

queueQ;

//初始化

here.row=p;here.col=q;

finish.row=m;finish.col=n;

grid[here.row][here.col]=0;

while(true){

for(i=0;i<4;i++)

{

nbr.row=here.row+offset[i].row;

nbr.col=here.col+offset[i].col;

if((nbr.row==finish.row)&&(nbr.col==finish.col))

{grid[finish.row][finish.col]=grid[here.row][here.col]+1;

break;

}

elseif(grid[nbr.row][nbr.col]==0)

{grid[nbr.row][nbr.col]=grid[here.row][here.col]+1;

Q.push(nbr);}//符合条件的nbr都压进去

}

if((nbr.row==finish.row)&&(nbr.col==finish.col))

{grid[finish.row][finish.col]=grid[here.row][here.col]+1;

break;

}

if(Q.empty())

{

cout<<"nopath!

"<

break;

}

here=Q.front();//取出front

Q.pop();

};

/****************************建造最短路径****************

从终点往回看,每次循环都看和终点计数的差值****************/

here=finish;

intlength=grid[finish.row][finish.col];

for(j=1;j

{

for(i=0;i<4;i++)

{

nbr.row=here.row+offset[i].row;

nbr.col=here.col+offset[i].col;

if(grid[nbr.row][nbr.col]==(grid[finish.row][finish.col]-j))

{

grid[nbr.row][nbr.col]='p';//你都把值改了下一循环成了p-1

here=nbr;

break;

}

}

}

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

当前位置:首页 > 表格模板 > 合同协议

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

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