计算机软件技术基础上机编程Word格式.docx
- 文档编号:19553651
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:20
- 大小:102.70KB
计算机软件技术基础上机编程Word格式.docx
《计算机软件技术基础上机编程Word格式.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础上机编程Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
s=s->
next;
intLong(linklist*h)//计算链表的长度//
{inti=0;
linklist*s;
{i++;
return(i);
voidDelete(linklist*h,intk)//删除链表中第k个结点//
linklist*p1,*p2;
p1=h;
if(k==1){h=h->
free(p1);
}
else
{
while(i<
k-1&
&
p1!
i++;
p2=p1;
p1=p1->
p2->
next=p1->
free(p1);
linklist*Nixu(linklist*h)//逆序输出链表//
{linklist*r,*q,*p;
r=h;
p=r->
q=p->
if(h==NULL)
thelinklistisempty\n"
//空表//
while(q!
=NULL&
h!
{p->
next=r;
r=p;
p=q;
q=q->
h->
next=NULL;
p->
return(p);
//返回根结点//
main()
{intk,x;
linklist*h;
do//输出菜单//
\nqingshurumingling:
1.jianlilianbiao;
2.shuchulianbiaozhongdeneirong;
3.shuchulianbiaodechangdu;
4.shanchudiKgejiedian;
5.jianglianbiaodaoxubingshuchu;
6.tuichuchengxu;
qingshuru1--6deshuzi:
if(x<
1||x>
6)printf("
error!
switch(x)
{case1:
h=Creatlist();
break;
case2:
Putlist(h);
case3:
printf("
lianbiaodechangdushi%d"
Long(h));
case4:
Inputthenodeyouwanttodelete:
k);
Delete(h,k);
case5:
h=Nixu(h);
case6:
exit(0);
//退出程序//
while
(1);
退出程序;
上机题二:
二叉树
1.动态交互建立二叉树,结点个数任意;
2.分别用DLR,LDR,LRD三种方式对二叉树进行遍历并输出结果;
3.计算二叉树中结点个数并输出;
4.计算二叉树深度并输出
源程序:
#include"
stdio.h"
malloc.h"
structTreeNode
{intdata;
structTreeNode*Lchild;
structTreeNode*Rchild;
};
structTreeNode*create()//用于建立二叉树的子函数//
{structTreeNode*T;
inta;
a);
if(a==0)returnNULL;
else//动态建立二叉树//
{T=(structTreeNode*)malloc(sizeof(structTreeNode));
T->
data=a;
//建立根结点//
Lchild=create();
//递归建立左子树//
Rchild=create();
//递归建立右子树//
return(T);
voidPre(structTreeNode*T)//用于进行先序遍历的子函数//
{if(T!
=NULL)
{printf("
%5d"
T->
//访问根结点//
Pre(T->
Lchild);
//递归访问左子树//
Rchild);
//递归访问右子树//
voidMid(structTreeNode*T)//用于进行中序遍历的子函数//
{
if(T!
{Mid(T->
Mid(T->
voidPost(structTreeNode*T)//用于进行后序遍历的子函数//
{if(T!
{Post(T->
Post(T->
//递归访问右子树//
voidvisit(structTreeNode*T)//用于访问二叉树的子函数//
{printf("
theresultofDLR:
Pre(T);
theresultofLDR:
Mid(T);
theresultofLRD:
Post(T);
intleaf(structTreeNode*T)//用于计算叶子结点的子函数//
{inta,b;
if(T==NULL)return(0);
elseif(T->
Lchild==NULL&
T->
Rchild==NULL)//判断该结点是叶子结点//
return
(1);
{a=leaf(T->
//递归计算左子树上叶子数//
b=leaf(T->
//递归计算右子树上叶子数//
return(a+b+1);
intmax(intx,inty)//用于取两数的较大值的子函数//
{if(x>
y)return(x);
elsereturn(y);
intdeep(structTreeNode*T)//用于计算二叉树深度的子函数//
{intk=0;
Rchild==NULL)//该结点有孩子,深度增加1//
elsereturn(1+max(deep(T->
Lchild),deep(T->
Rchild)));
//递归求取树的深度//
main()
{intm,n,p;
structTreeNode*T;
createatree\n"
T=create();
//建立二叉树//
1.visitthetree\n"
//打印菜单//
2.putoutthetotalnumberofnode\n"
3.putoutthedepthofthetree\n"
4.exit\n"
while
(1)
\npleaseinput1-4:
"
//完成菜单的相应功能//
m);
if(m==1)visit(T);
if(m==2){n=leaf(T);
thetotalnumberofleavesinthetreeis%d\n"
n);
if(m==3)if(m==3){p=deep(T);
thedepthofthetreeis%d\n"
p);
if(m==4)break;
调试结果:
createatree
102504068960005685006900025000
1.visitthetree
2.putoutthetotalnumberofnode
3.putoutthedepthofthetree
4.exit
pleaseinput1-4:
thetotalnumberofleavesinthetreeis10
1
12546896568569
15496868556692
96885695664521
2
thetotalnumberofleavesinthetreeis10
3
thedepthofthetreeis7
4
Pressanykeytocontinue
上机题三图
在交互方式下完成下列任务:
1、根据教材上算法,完成图的深度和广度优先遍历,要求任意给定起始点,输出结果;
2、根据教材上算法,完成图的单源最短路径的算法,要求任意给定源点,输出结果
程序:
#include<
#defineM1000
#defineVNum6
structGLink
{intNo;
intRight;
structGLink*Relat;
};
intG[VNum][VNum]=1//对图进行初始化//
{1,31,11,M,41,M,
M,0,15,50,10,M,
13,M,0,15,M,M,
M,13,M,0,17,M,
M,M,M,26,0,M,
M,M,M,3,M,0};
structGLink*GL[VNum];
intVisited[VNum];
voidCreateGLink(intG[VNum][VNum])//建立邻接表//
{inti,j;
structGLink*p,*q;
for(i=0;
i<
VNum;
i++)
{GL[i]=q=NULL;
for(j=0;
j<
j++)
{if(i!
=j)
if((G[i][j]>
0)&
(G[i][j]<
M))//该两点存在有向路径//
{p=(structGLink*)malloc(sizeof(structGLink));
No=j;
//将该点加入邻接表//
Right=G[i][j];
if(GL[i]==NULL)
GL[i]=p;
q->
Relat=p;
q=p;
voidDFS(intA[VNum][VNum],intV)//用于进行深度优先遍历的子函数,V是起点//
{inti;
[%d]"
V);
Visited[V]=1;
//将其标记为已访问//
for(i=0;
i<
VNum;
if((A[V][i]>
(A[V][i]<
M)&
(Visited[i]!
=1))//该结点未被访问过//
DFS(A,i);
//访问该点//
i++)
if(Visited[i]!
=1)DFS(A,i);
//仍有未必访问过的点,访问该点//
voidBFS(intA[VNum][VNum],intV)//用于广度优先遍历的子函数//
{intCQ[VNum];
inta=0,b,c;
inti,k=1;
i<
i++)
CQ[i]=M;
//标志为访问过//
CQ[0]=V;
[%d]"
V);
//将该结点放入队列//
while(k<
6&
a<
k)//仍有结点未被访问并且队列中仍有结点的后继结点未被访问//
{b=CQ[a];
for(c=0;
c<
c++)//依次将队列中以结点为首的邻接表中的结点插入队列//
if(Visited[c]==0&
A[b][c]<
M&
A[b][c]!
=0)
c);
CQ[++k]=c;
//未被访问过,将其插入到队列中//
Visited[c]=1;
a++;
for(i=0;
if(Visited[i]==0)
BFS(A,i);
voidShort(intA[VNum][VNum],intV)//用于计算最短路径的子函数,V是起点//
{intDist[VNum],Path[VNum];
intS=0;
inti,k;
intwm,u;
{Dist[i]=A[V][i];
//默认这两点之间即为最短路径//
if(Dist[i]<
M)Path[i]=V;
//存储该路径//
S=S|(1<
<
V);
for(k=0;
k<
k++)
{wm=M;
u=V;
if(((S&
(1<
i))==0)&
(Dist[i]<
wm))//该两点间存在路径//
{u=i;
wm=Dist[i];
u);
((Dist[u]+A[u][i])<
Dist[i]))
{Dist[i]=Dist[u]+A[u][i];
//找到新的最短路径//
Path[i]=u;
//更新路径长度//
i++)//输出该源结点到其他各点的最短路径//
if((S&
i))!
=0)
{k=i;
while(k!
=V)
%d<
-"
k);
k=Path[k];
%d"
=%d\n"
Dist[i]);
elseprintf("
NoPath:
%d"
i);
{inti,j,a,b;
CreateGLink(G);
1.searchthegraphdeepfirst\n"
//打印菜单//
2.searchthegraphbroadfirst\n"
3.findtheshortestpath\n"
while
(1)//完成菜单功能//
\npleaseinputanumfrom1to4:
if(a==1)
{for(i=0;
Visited[i]=0;
printf("
pleaseinputthefirstnode:
scanf("
j);
\nTheResultofDFSis:
DFS(G,j);
if(a==2)
\nTheResultofBFSis:
BFS(G,j);
}
if(a==3)
pleaseinputthesourcenode:
b);
\nTheResultofShortestpathis:
Short(G,b);
if(a==4)break;
结果调试截图:
上机题四
检索和排序
1、任意给定无序序列,用对半检索法,交互检索任意给定的关键字KEY;
2、任意给定无序序列,用快速排序法对进行排序,并统计交换次数;
3、任意给定无序序列,用冒泡排序法对进行排序,并统计交换次数和排序的趟数;
#defineM100
structRedType
{intkey;
intother;
inta;
intSearch(structRedTypeST[],intn,intkey)//用于进行对半查找的子函数//
{intlow,high,mid;
low=0;
high=n-1;
while(low<
=high)//未检索完毕//
{mid=(low+high)/2;
//指向中间值//
if(ST[mid].key==key)return(mid+1);
//检索成功//
elseif(key<
ST[mid].key)high=mid-1;
//待查找值小于中间值,到前一半查找//
elselow=mid+1;
//待查找值大于中间值,到后一半查找//
return(0);
intQuickSort(structRedTypeL[],intlow,inthigh)//用于快速排序的子函数//
{inti,j,t=0;
structRedTypetemp;
if(low>
=high)//待排序队列空,结束//
i=low;
j=high;
temp=L[i];
while(i<
j)
{while((L[j].key>
=temp.key)&
(j>
i))//从后向前找出第一个小于关键值的数据//
j--;
if(i<
j){L[i]=L[j];
t++;
}//交换,同时交换次数加1//
while((L[i].key<
i))//从前向后找出第一个大于关键值的数据//
i++;
j){L[j]=L[i];
L[i]=temp;
\n\nTheQukSortLoop[%d]is:
for(j=0;
j<
a;
%d"
L[j].key);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 技术 基础 上机 编程