数据结构实验题Word格式文档下载.docx
《数据结构实验题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验题Word格式文档下载.docx(34页珍藏版)》请在冰豆网上搜索。
#include<
iostream>
usingnamespacestd;
structNode{
intentry;
Node*next;
Node();
Node(intitem,Node*add_on=NULL);
};
Node:
:
Node()
{
next=NULL;
}
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<
position;
i++)
q=q->
next;
returnq;
voidList:
insert(intposition,constint&
x)
Node*previous,*following,*newnode;
if(position>
0){
previous=retrieve(position-1);
following=previous->
}
elsefollowing=head;
newnode=newNode(x,following);
if(position==0)
head=newnode;
else
previous->
next=newnode;
count++;
remove(inttarget)
Node*prior,*current;
if(sequential_search(target)>
0){
prior=retrieve(sequential_search(target)-1);
current=prior->
prior->
next=current->
else{
current=head;
head=head->
deletecurrent;
count--;
intList:
sequential_search(constint&
target)//sequentialsearch
intdata;
for(intposition=0;
position<
count;
position++){
data=retrieve(position)->
entry;
if(data==target)returnposition;
intmain()
inttask_number,number,com;
intcontrol,x,y;
intposition;
Listl;
cin>
>
task_number;
{
cin>
number>
com;
for(intj=number;
j>
0;
j--)
{
l.insert(0,j);
}
for(intk=0;
k<
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<
number;
j++)
cout<
<
l.retrieve(j)->
entry<
'
'
;
cout<
endl;
return0;
Wire_Routing(随机迷宫,最短路径)
queue>
windows.h>
time.h>
structposition//位置
introw;
intcol;
voiddisplay(intsize,int**grid);
/*****************************产生随机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)"
size;
grid=newint*[size+2];
//动态创建二维数组
for(i=0;
size+2;
grid[i]=newint[size+2];
//这个指针数组的每个指针元素又指向一个数组。
grid[i][0]='
y'
grid[0][i]='
grid[size+1][i]='
grid[i][size+1]='
srand((unsigned)time(NULL));
//以时间为随机种子
for(i=1;
=size;
for(j=1;
if(1==rand()%10)//10%摡率达成
grid[i][j]='
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;
queue<
position>
Q;
//初始化
here.row=p;
here.col=q;
finish.row=m;
finish.col=n;
grid[here.row][here.col]=0;
while(true){
4;
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)&
{grid[finish.row][finish.col]=grid[here.row][here.col]+1;
break;
if(Q.empty())
nopath!
here=Q.front();
//取出front
Q.pop();
};
/****************************建造最短路径****************
从终点往回看,每次循环都看和终点计数的差值****************/
here=finish;
intlength=grid[finish.row][finish.col];
for(j=1;
length;
if(grid[nbr.row][nbr.col]==(grid[finish.row][finish.col]-j))
grid[nbr.row][nbr.col]='
p'
//你都把值改了下一循环成了p-1
here=nbr;
}