数据结构实验题.docx
《数据结构实验题.docx》由会员分享,可在线阅读,更多相关《数据结构实验题.docx(34页珍藏版)》请在冰豆网上搜索。
![数据结构实验题.docx](https://file1.bdocx.com/fileroot1/2022-11/16/0f7d24aa-803e-4b0a-936b-2c5e21695b45/0f7d24aa-803e-4b0a-936b-2c5e21695b451.gif)
数据结构实验题
数据结构作业题
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;iq=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;positiondata=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;
}
}
}