上机报告.docx
- 文档编号:30125719
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:26
- 大小:19.24KB
上机报告.docx
《上机报告.docx》由会员分享,可在线阅读,更多相关《上机报告.docx(26页珍藏版)》请在冰豆网上搜索。
上机报告
计算机软件技术基础
上机实验报告
电信1001
韩笑
3100503002
2012年5月28日
一、线性表
#include
#include
#include
#defineLENsizeof(structlist)
typedefstructlist/*定义结构体*/
{
intdata;
structlist*next;
}List;
List*creat()/*建立链表*/
{
List*head;
List*p,*q;
intn=0;
p=q=(List*)malloc(LEN);
scanf("%d",&p->data);/*输入链表内容*/
head=NULL;
while(p->data!
=0)
{
if(head==NULL)head=p;
elseq->next=p;
q=p;
p=(List*)malloc(LEN);
scanf("%d",&p->data);
}
q->next=NULL;
return(head);
}
voidoutput(structlist*head)/*输出链表*/
{
List*p;
printf("\nTherecordsare:
\n\n");
p=head;
if(p!
=NULL)
do
{printf("%5d",p->data);
p=p->next;
}while(p!
=NULL);
printf("\n\n");
}
voidLength(List*head)/*计算链表长度*/
{
List*p=head;
intn=0;
while(p!
=NULL)
{
n++;
p=p->next;
}
printf("Thelengthis:
%d\n\n",n);
}
structlist*DeleteNode(structlist*head,intdel_num)/*删除结点*/
{
structlist*p;
structlist*q;
if(head==NULL){printf("\nListnull!
\n");returnhead;}/*空表,不能删除*/
p=head;
while(del_num!
=p->data&&p->next!
=NULL)
{q=p;p=p->next;}
if(del_num==p->data)
{
if(p==head)
head=p->next;
else
q->next=p->next;
printf("Successdelete!
\n");/*删除成功*/
returnhead;
}
elseprintf("%dnotbeenfound!
\n\n",del_num);/*没有记录,删除失败*/
return(head);
}
structlist*Daoxu(structlist*head)/*链表倒序*/
{
List*prep,*nowp,*nextp;
prep=NULL;
nowp=head;
while(nowp!
=NULL)
{nextp=nowp->next;
nowp->next=prep;
prep=nowp;
nowp=nextp;
}
returnprep;
}
charInitialization()/*输入执行功能*/
{
charch;
do
{printf("输入1-6,使链表执行该功能:
\n");
ch=getchar();
if(ch>='1'&&ch<='6')
{
printf("执行结果如下:
\n\n");
returnch;
}
}while
(1);
}
voidmain()/*主函数*/
{
List*head;
intdel_num;
charch;
printf("\n\t\t\t\t1:
<建立链表>\n");/*界面初始化*/
printf("\n\t\t\t\t2:
<输出链表>\n");
printf("\n\t\t\t\t3:
<计算长度>\n");
printf("\n\t\t\t\t4:
<删除结点>\n");
printf("\n\t\t\t\t5:
<倒序链表>\n");
printf("\n\t\t\t\t6:
<退出系统>\n");
printf("\n\t\t\t请输入1--6,其他输入非法!
\n");
do
{
ch=Initialization();/*输入执行功能*/
if(ch=='1')/*建立链表*/
{
printf("输入链表内容:
\n");
head=creat();
getchar();
}
if(ch=='2')/*输出链表*/
{
output(head);
getchar();
}
if(ch=='3')/*计算链表长度*/
{
Length(head);
getchar();
}
if(ch=='4')/*删除结点*/
{
printf("\n请输入要删除的结点:
\n");
scanf("%d",&del_num);
head=DeleteNode(head,del_num);
output(head);
getchar();
}
if(ch=='5')/*链表倒序*/
{
head=Daoxu(head);
output(head);
getchar();
}
if(ch=='6')/*退出系统*/
break;
}while
(1);
}
调试结果:
1:
<建立链表>
2:
<输出链表>
3:
<计算长度>
4:
<删除结点>
5:
<倒序链表>
6:
<退出系统>
请输入1--6,其他输入非法!
输入1-6,使链表执行该功能:
1
执行结果如下:
输入链表内容:
1<\n>2<\n>3<\n>4<\n>5<\n>6<\n>7<\n>0<\n>
输入1-6,使链表执行该功能:
2
执行结果如下:
Therecordsare:
1234567
输入1-6,使链表执行该功能:
3
执行结果如下:
Thelengthis:
7
输入1-6,使链表执行该功能:
4
执行结果如下:
请输入要删除的结点:
3
Successdelete!
Therecordsare:
124567
输入1-6,使链表执行该功能:
5
执行结果如下:
Therecordsare:
765421
输入1-6,使链表执行该功能:
6
执行结果如下:
Pressanykeytocontinue
二、二叉树
#include
#include
structTree
{intdata;
structTree*Lchild,*Rchild;
};
structTree*CreateTree()/*创建二叉树*/
{
inta;
structTree*p;
scanf("%d",&a);
if(a==0)p=NULL;
else
{
p=(structTree*)malloc(sizeof(structTree));
p->data=a;
p->Lchild=CreateTree();
p->Rchild=CreateTree();
}
returnp;
}
voidDLR(structTree*T)/*先序遍历*/
{
if(T==NULL)return;
printf("%5d",T->data);
DLR(T->Lchild);
DLR(T->Rchild);
}
voidLDR(structTree*T)/*中序遍历*/
{
if(T==NULL)return;
LDR(T->Lchild);
printf("%5d",T->data);
LDR(T->Rchild);
}
voidLRD(structTree*T)/*后序遍历*/
{
if(T==NULL)return;
LRD(T->Lchild);
LRD(T->Rchild);
printf("%5d",T->data);
}
intTreeDepth(structTree*T)/*计算深度*/
{
if(!
T)
return0;
else
returnTreeDepth(T->Lchild)>TreeDepth(T->Rchild)?
(TreeDepth(T->Lchild)+1):
(TreeDepth(T->Rchild)+1);
printf("\n");
}
inta=0;
intCountnode(structTree*T)/*计算结点*/
{
if(T)
{a++;
Countnode(T->Lchild);
Countnode(T->Rchild);
}
returna;
printf("\n");
}
charInitialization()/*界面初始化*/
{charch;
do
{printf("\n请输入1-7,及您要执行的功能:
\n");
ch=getchar();
if(ch>='1'&&ch<='7')
{printf("执行结果如下:
\n");
returnch;
}
}while
(1);
}
voidmain()/*主函数*/
{
structTree*T;T=NULL;
charch;
printf("\n\t\t\t\t1:
<建立二叉树>\n");
printf("\n\t\t\t\t2:
<先序遍历>\n");
printf("\n\t\t\t\t3:
<中序遍历>\n");
printf("\n\t\t\t\t4:
<后序遍历>\n");
printf("\n\t\t\t\t5:
<计算深度>\n");
printf("\n\t\t\t\t6:
<计算结点>\n");
printf("\n\t\t\t\t7:
<退出系统>\n");
printf("\n\t\t\t请输入1--7,其他输入非法!
\n");
do
{
ch=Initialization();/*建立二叉树*/
if(ch=='1')
{printf("请输入结点:
\n");
T=CreateTree();
getchar();
}
if(ch=='2')
{printf("\nThepreorderis:
");/*先序遍历*/
DLR(T);
getchar();
}
if(ch=='3')
{printf("\nTheinorderis:
");/*中序遍历*/
LDR(T);
getchar();
}
if(ch=='4')
{printf("\nThepostorderis:
");/*后序遍历*/
LRD(T);
getchar();
}
if(ch=='5')
{printf("\nThedepthofthetreeis:
%d",TreeDepth(T));/*二叉树深度*/
getchar();
}
if(ch=='6')
{printf("\nThenodesofthetreeare:
%d\n",Countnode(T));/*二叉树结点个数*/
getchar();
}
if(ch=='7')break;/*退出系统*/
}while
(1);
}
调试结果:
1:
<建立二叉树>
2:
<先序遍历>
3:
<中序遍历>
4:
<后序遍历>
5:
<计算深度>
6:
<计算结点>
7:
<退出系统>
请输入1--7,其他输入非法!
请输入1-7,及您要执行的功能:
1
执行结果如下:
请输入结点:
1\n2\n3\n0\n0\n4\n0\n0\n5\n0\n6\n0\n0\n
请输入1-7,及您要执行的功能:
2
执行结果如下:
Thepreorderis:
123456
请输入1-7,及您要执行的功能:
3
执行结果如下:
Theinorderis:
324156
请输入1-7,及您要执行的功能:
4
执行结果如下:
Thepostorderis:
342651
请输入1-7,及您要执行的功能:
5
执行结果如下:
Thedepthofthetreeis:
3
请输入1-7,及您要执行的功能:
6
执行结果如下:
Thenodesofthetreeare:
6
请输入1-7,及您要执行的功能:
7
执行结果如下:
Pressanykeytocontinue
三、图
#include
#include
#defineMAXV50
#defineINF32767
typedefstruct
{intno;
intinfo;
}VertexType;
typedefstruct
{intedges[MAXV][MAXV];
intn,e;
VertexTypeves[MAXV];
}MGraph;
intvisited[MAXV];
//队列的定义及相关函数的实现
structLQNode
{
intData;
structLQNode*next;
};
structLQueue
{
structLQNode*front,*rear;
};
structLQueue*InitQueue(structLQueue*q)
{
structLQNode*p;
q=(structLQueue*)malloc(sizeof(structLQueue));
p=(structLQNode*)malloc(sizeof(structLQNode));
p->next=NULL;
q->front=q->rear=p;
returnq;
}
voidEnQueue(structLQueue*Q,inte)
{
LQNode*q=newLQNode;
q->Data=e;
q->next=NULL;
if(Q==NULL)
return;
if(Q->rear==NULL)
Q->front=Q->rear=q;
else
{
Q->rear->next=q;
Q->rear=Q->rear->next;
}
}
intQueueEmpty(structLQueue*Q)
{
if(Q->front==Q->rear)
return1;
else
return0;
}
voidDeQueue(structLQueue*Q,int*e)
{
if(Q==NULL)
return;
if(Q->front==Q->rear)
{
*e=Q->front->Data;
Q->front=Q->rear=NULL;
}
else
{
*e=Q->front->Data;
Q->front=Q->front->next;
}
}
voidDispMat(MGraphg)
{
inti,j;
for(i=0;i {for(j=0;j if(g.edges[i][j]==INF) printf("%s","INF"); else printf("%2d",g.edges[i][j]); printf("\n"); } } voidDFS(MGraphG,intv)/*深度优先遍历*/ { inti; visited[v]=1; printf("%d,",v); for(i=0;i if((visited[i]! =1)&&(G.edges[v][i]! =0)) DFS(G,i); } voidBFS(MGraphG,intv)/*广度优先遍历*/ { intVisited[MAXV]={0}; inti,u,w; structLQueueQ[MAXV]; InitQueue(Q); EnQueue(Q,v); while(! QueueEmpty(Q)) {DeQueue(Q,&u); Visited[u]=1; printf("%d",u); w=u+1; for(i=0;i if(! Visited[w]) EnQueue(Q,w); } } voidShortPath(MGraphG,intD[],intP[],intv0)/*单源最短路径*/ {intfinal[MAXV],v=0,i,j,k,min; for(i=1;v<=G.n;i++) {final[v]=0;D[i]=G.edges[v0][v]; if(D[v] final[v0]=1; for(i=1;i {min=INF;k=v0; for(j=1;j if((final[j]! =1)&&(D[j] {k=j;min=D[j];} final[k]=1; } for(i=0;i<=G.n;i++) if((final[i]! =1)&&(D[k]+G.edges[k][i] {D[i]=D[k]+G.edges[k][i];P[i]=k;} } for(i=0;i<=G.n;i++) if(final[i]! =0) {k=i; while(k! =v0) {printf("%d<-",k);k=P[k];} printf("%d",v0);printf("/nShortPathLength: %d",D[i]); } elseprintf("TheVertex%dNoShortPath",i); } voidmain() { inti,j,v,D[MAXV],P[MAXV]; MGraphg; intA[MAXV][6]={ {INF,10,INF,30,INF,100},{INF,INF,5,INF,INF,INF}, {INF,INF,5,INF,INF,INF},{INF,INF,INF,50,INF,INF}, {INF,INF,INF,INF,INF,10},{INF,INF,INF,20,INF,60},{INF,INF,INF,INF,INF,INF}, }; g.n=6; g.e=8; for(i=0;i for(j=0;j g.edges[i][j]=A[i][j]; printf("\n"); printf("有向图G的邻接矩阵: \n"); DispMat(g); printf("请输入开始遍历的顶点: "); scanf("%d",&v); printf(“深度优先遍历结果: ”); DFS(g,v); printf("\n"); printf("请输入开始遍历的顶点: "); scanf("%d",&v); printf(“广度优先遍历结果: ”); BFS(g,v); printf("\n"); printf("请输入源点: "); scanf("%d",&v); printf(“单源最短路径: \n”) ShortPath(g,D,P,v); printf("\n"); } 调试结果: 有向图G的邻接矩阵: INF10INF30INF100 INFINF5INFINFINF INFINF5INFINFINF INFINFINF50INFINF INFINFINFINFINF10 INFINFINF20INF60 INFINFINFINFINFINF 请输入开始遍历的顶点: 1 深度优先遍历结果: 054312 请输入开始遍历的顶点: 1 广度优先遍历结果: 024531 请输入源点: 1 单源最短路径: 1->2 ShortPathLength: 10 1->3 ShortPathLength: 50 1->4 ShortPathLength: 30 1->5 ShortPathLength: 100 1->6 ShortPathLength: INF 四、对分检索 #include"stdio.h" #include #include intn1,n2,n3; structah {intnum; }a[10]; voidmeun()/*初始化界面*/ {printf("\n\n"); printf("\t\t菜单\n\n"); printf("\t\t【0】输入数据\n\n"); printf("\t\t【1】快速排序\n\n"); printf("\t\t【2】冒泡排序\n\n"); printf("\t\t【3】对半检索\n\n"); printf("\t\t【4】清屏\n\n"); printf("\t\t【5】退出\n\n"); printf("\t\t选择《0---4》: "); } voidinput()/*输入*/ {inti; printf("任意输入10个数据"); for(i=0;i<10;i++) scanf("%d",&a[i].num); } voidfind()/*查找*/ { inthigh,mid,l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)