数据结构课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
实验1 线性表及其应用
1.集合的并、交和差
【问题描述】
编制一个能演示执行集合的并、交和差运算的程序
【基本要求】
1)集合的元素限定为小写字母;
2)演示程序以用户和计算机的对话方式执行。
void Union(OrderedSet &T,OrderedSet S1, OrderedSet S2)
{//求已建成的集合Sl和S2的并集T,即:S1.head!=NULL且S2.head!=NULL if(InitList(T){
pl=GetEiemPos(Sl,1);
p2=GetElemPos(S2,l);
while(pl&&p2)
{
cl=Elem(pl); c2=Elem(p2);
if(cl<=c2)
{
Append(T,Copy(pl);
pl=SuccNode(pl);
if(cl==c2) p2=SuccNode(p2);
}
else
{ Append(T,Copy(p2)); p2=SuccNode(p2); }
while(pl)
{ Append( T,Copy(pl)); pl=SuccNode(pl);}
while(p2)
{Append(T,Copy(p2)); p2=SuccNode(p2);}
}
}//Union
votd Intersection(OrderedSet &T,OrderedSet S1; OrderedSet S2) {
//求集合 Sl 和 S2 的交集 T
if(!InitList(T)) T.head =NULL;
else{
pl=GetElemPos(S1,1);
p2=GetElemPos(S2,l);
while(pl&&p2){
c1=Elem(p1);
c2=Elem(p2);
if(cl else if(cl>c2) p2=SuccNode(p2); else{ //cl==c2 Append(T,Copy(pl)); pl=SuccNode(pl); p2=SuccNode(p2); }//else }//while }// else }//Intersection void Difference(OrderedSet &T,OrderedSet S1,OrderedSet S2) {//求集合Sl和S2的差集T if(!InitList(T)) T.head =NULL; else { pl =GetElemPos(S1,l);p2=GetElemPos(S2,1); while(pl&&p2) { cl=Elem(pl);c2=Elem(p2); if(cl Append(T,Copy(pl)); pl=SuccNode(pl) else if(cl>c2) p2=SuccNode(p2); else // Cl ==c2 {pl =SuccNode(p1);p2=SuccNode(p2);} }//while while(pl) { Apend(T,Copy(pl)); p =SuccNode(pl); } }//else }//Difference void WriteSetElem(LinkType p) {//显示集合的一个元素 pramtk'Jh WriteElem(Elem(p)); }//WriteSetElem votd Printset(OrderedSet T) {//显示集合的全部元素 p=GetElemPos(T,1); printf('[']); if(p){ WriteElem(Elem(p); p=SuccNode(p); } ListTraverse(p,WriteSetElem()); Prtntf(')]'); }//Printset 实验2 栈、队列和递归程序设计 2. 迷宫问题。 【问题描述】 随机产生一个mXn的迷宫,0和1分别表示迷宫中的通路和障碍。求出一条从入口到出口的通路,或得到没有通路的结论。 【基本要求】 以链表作存储结构的栈类型,写一个非递归程序。 #include #include using namespace std; #define M 20 #define N 20 struct move{int dx,dy;}; move mazemove[8]; char ma[M][N]; int False=0; void maze() {int i,j,num; for(i=1;i {for(j=1;j {num=(800*(i+j)+1500)%327; if((num<156)&&(i!=M||j!=N)) ma[i][j]='1'; else ma[i][j]='0'; } } ma[1][1]='0'; ma[M-2][N-2]='0'; for(i=0;i {for(j=0;j cout< cout< } } void inimove() {mazemove[0].dx=0;mazemove[0].dy=1; mazemove[1].dx=1;mazemove[1].dy=1; mazemove[2].dx=1;mazemove[2].dy=0; mazemove[3].dx=1;mazemove[3].dy=-1; mazemove[4].dx=0;mazemove[4].dy=-1; mazemove[5].dx=-1;mazemove[5].dy=-1;