数据结构课程设计指导书Word下载.docx
- 文档编号:22556054
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:38
- 大小:51.64KB
数据结构课程设计指导书Word下载.docx
《数据结构课程设计指导书Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计指导书Word下载.docx(38页珍藏版)》请在冰豆网上搜索。
value=ch;
link=head->
link;
link=p;
}
returnhead;
}
voidprint(llistnode*head)
{llistnode*p;
\n"
p=head->
while(p)
{printf("
%c"
p->
value);
p=p->
llistnode*visitll(llistnode*h,charx)
llistnode*p;
p=h;
while((p->
value!
=x)&
&
(p!
=NULL))
p=p->
return(p);
llistnode*predall(llistnode*h,llistnode*q)
if(q==h)
p=NULL;
else
{p=h;
link!
=q)&
voidinsertll(llistnode*h,llistnode*q,charx)
{
llistnode*p,*r;
r=(llistnode*)malloc(sizeof(llistnode));
r->
value=x;
if(h==q)
h=r;
{p=predall(h,q);
link=r;
link=q;
voiddeletell(llistnode*h,llistnode*q)
if(h==q)
h=q->
p=predall(h,q);
link=q->
free(q);
main()
{llistnode*a;
llistnode*result=NULL;
intchoice;
chardata,data_cz;
a=creat();
while
(1)
\n以下是单链表的应用,请选择:
\n1、遍历链表并依次输出其的结点值"
\n2、在链表中查找是否存在某结点"
\n3、在链表中查找某结点的前驱"
\n4、在链表中查找某结点的后继"
\n5、在链表中插入结点"
\n6、在链表中删除结点"
\n7、退出"
scanf("
%d"
&
choice);
switch(choice)
case1:
print(a);
break;
case2:
getchar();
请输入待查结点的值:
data=getchar();
result=visitll(a,data);
if(result!
=NULL)
%c在链表中"
data);
%c不在链表中"
result=NULL;
case3:
getchar();
if(result==NULL)
result=predall(a,result);
%c的前驱是%c"
data,result->
%c没有前驱"
case4:
if(result==NULL)
if(result->
%c的后继是%c"
link->
%c没有后继"
case5:
请输入待插结点的值:
请输入插入在哪个结点前面:
data_cz=getchar();
result=visitll(a,data_cz);
insertll(a,result,data);
case6:
请输入待删除结点的值:
deletell(a,result);
case7:
defalut:
if(choice==7)
要求及提示:
1、要求写出每一个函数的功能。
2、(选作)若现在要建立的链表为双向链表,则程序应如何修改,试实现之。
2.用数组实现两个矩阵的相乘运算
程序结构:
#include“stdio.h”
intr[6][6];
voidmult(inta[6][6],intb[6][6])
{}
main()
inti,j;
intnum1[6][6],num2[6][6];
printf(“请输入第一个矩阵的值:
”,);
for(i=1;
i<
=6;
i++)
for(j=1;
j<
j++)
scanf(“%d”,&
num1[i][j]);
printf(“请输入第二个矩阵的值:
num2[i][j]);
mult(num1,num2);
printf(“\n两个矩阵相乘后的结果为:
”);
{for(j=1;
printf(“%4d”,r[i][j]);
printf(“\n”);
要求及提示:
1、要求完善函数mult(),
2、现有A,B两个矩阵,要求用上述程序求出A与B相乘后的运行结果,
413690310124
731421131052
010291192130
A=410260B=912400
121015300101
300512210689
3、按层次遍历二叉树
程序清单:
#defineqsize10
structnode
{chardata;
structnode*lchild;
structnode*rchild;
}bnode;
typedefstructnode*blink;
typedefstruct
{intfront,rear,count;
blinkdata[qsize];
}cirq;
cirq*q;
voidinitq(cirq*q)
{q->
front=q->
rear=0;
q->
count=0;
intqempty(cirq*q)
{returnq->
count==0;
voidenq(cirq*q,blinkx)
count++;
data[q->
rear]=x;
rear=(q->
rear+1)%qsize;
blinkdeq(cirq*q)
{blinktemp;
temp=q->
front];
count--;
front=(q->
front+1)%qsize;
returntrmp;
blinkcreat()
{blinkbt;
ch=getchar();
if(ch!
=’#’)
{bt=malloc(sizeof(bnode));
bt->
data=ch;
lchild=creat();
rchild=create();
bt=NULL;
returnbt;
voidlevel(blinkbt)
{blinkp;
p=bt;
init(q);
if(p)
{printf(“%c”,p->
data);
enq(q,p);
while(!
qempty(q))
{p=deq(q);
if(q->
lchild)
{printf(“%c”,p->
lchild->
emq(q,p->
lchild);
if(q->
rchild)
rchild->
rchild);
main()
{blinkroot;
root=creat();
printf(“\n”);
level(root);
4、快速排序
#definemax100
intr[max];
voidquicksortL(intr[],ints,intt)
i=s;
j=t;
r[0]=r[s];
while(i<
j)
{while((r[0]<
=r[j])&
(i<
j))
j--;
if(i<
{r[i]=r[j];
i++;
while((r[0]>
=r[i])&
{r[j]=r[i];
r[i]=r[0];
if(s<
i-1)
quicksortL(r,s,i-1);
if(t>
i+1)
quicksortL(r,i+1,t);
inti,n;
printf(“请输入待排序元素的个数(少于100个):
scanf(“%d”,&
n);
for(i=1;
i<
=n;
i++)
{printf(“请输入第%d个元素”,i);
r[i]);
quicksortL(r,1,n);
printf(“排序结束后为:
\n”);
for(i=1;
=n;
printf(“%4d”,r[i]);
1、对12、34、13、6、79、10、56用上述算法进行快速排序,写出运行结果。
2、写出12、34、13、6、79、10、56用上述算法进行的第一趟快速排序后的结果。
5.堆排序
程序结构:
#include“stdio.h”
#definemax100
intr[max];
voidsift(intr[],inti,inth)
{
intj;
r[0]=r[i];
j=2*i;
while(j<
=h)
{if((j<
h)&
(r[j]>
r[j+1])}
j++;
if(r[0]>
r[j])
i=j;
j=2*i;
voidheapsortL(intr[],intn)
{intm,i;
m=n/2;
for(i=m;
i>
=1;
i--)
sift(r,i,n);
for(I=n;
i>
=1;
i--)
{r[0]=r[1];
r[1]=r[i];
r[i]=r[0];
sift(r,1,i-1);
inti,n;
printf(“请输入排序元素的个数(少于100个):
heapsortL(r,n);
i<
=n;
printf(“%4d”,r[i]);
3、对12、34、13、6、79、10、56用上述算法进行堆排序,写出运行结果。
4、画出12、34、13、6、79、10、56用上述算法建立的初始堆。
6、二叉树的建立及操作
#include“alloc.h”
structnode
structnode*lchild,*rchild;
}bnode;
blinkcreat()
{blinkbt;
ch=getchar();
if(ch!
=’#’)
{
bt=malloc(sieof(bnode));
data=ch;
bt->
lchild=creat();
rchile=creat();
returnbt;
voidpreorder(blinkbt)
if(bt)
{printf(“%c”,bt->
preorder(bt->
voidinorder(blinkbt)
inorder(bt->
prnitf(“%c”,bt->
voidpostorder(blinkbt)
if(bt)
postorder(bt->
printf(“%c”,bt->
intmax(intx,inty)
if(x>
y)
returnx;
returny;
intdepth(blinkbt)
retur1+max(depth(bt->
lchild),depth(bt->
rchild));
return0;
blinkroot;
root=creat();
printf(“先序遍历结果:
preorder(root);
printf(”中序遍历结果:
inorder(root);
printf(“后序遍历结果:
postorder(root);
printf(“depth=%d\n”,depth(root));
7、无向图的建立及遍历操作
typedefstructnode
intadjvex;
structnode*next;
}edgenode;
tyedefstructvnode
{intvertex;
edgenode*firstedge;
}vertexnode;
typedefvertexnodeadjlist[10];
typedefstruct
adjlistal;
intn,e;
}graph;
graph*g;
intvisited[10];
graph*creat()
{inti,j,k;
edgenode*s;
scanf(“%d%d”,&
g->
n,&
e);
=g->
n;
g->
al[i].firstedge=NULL;
k<
e;
k++)
i,&
j);
s=malloc(sizeof(edgenode));
s->
adjvex=j;
next=g->
al[i].firstedge;
al[i].firstedge=s;
adjvex=i;
al[j].firstedge;
al[j].firstedge=s;
returng;
voiddfs(graph*g,inti)
edgenode*p;
printf(“visitvertext:
%d\n”,i);
visited[i]=1;
p=g->
if(!
visited[p->
adjvex];
dfs(g,p->
adjvex);
next;
inti;
g=creat();
visited[i]=0;
if(!
visited[i])
dfs(g,i);
1、对于上图无向图的建立,应输入:
44
12
13
23
24
2、上图建立的邻接表为
1
(二)程序编写类题目
1.迷宫问题
[问题描述]
以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。
设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
[基本要求]
(1)实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。
求得的通路以三元组(i,j,d)的形式输出,其中:
(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。
(2)编写递归形式的算法,求得迷宫中所有可能的通路;
(3)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 指导书