太原理工大学数据结构实验报告Word文档下载推荐.docx
- 文档编号:22519186
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:32
- 大小:297.92KB
太原理工大学数据结构实验报告Word文档下载推荐.docx
《太原理工大学数据结构实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《太原理工大学数据结构实验报告Word文档下载推荐.docx(32页珍藏版)》请在冰豆网上搜索。
}node,*nodelink;
voidreadlink(nodelinkhead){
nodelinkp,q;
charc;
p=head;
printf("
Inputalinktable(astring):
"
);
scanf("
%c"
&
c);
if(c=='
\n'
)printf("
Thisstringisempty。
while(c!
='
){
q=(nodelink)malloc(sizeof(node));
q->
a=c;
p->
link=q;
p=q;
}
link=NULL;
}
voidwritelink(nodelinkhead){
nodelinkq;
if(head->
link==NULL)printf("
Thislinkisempty。
\n"
for(q=head->
link;
q;
q=q->
link)
q->
a);
int
insert(nodelinkhead,chark1,chark2){
p=head->
while(p->
a!
=k1&
&
p)
p=p->
if(p){
a=k2;
link=p->
return1;
else
{
Thereisno%c\n"
k1);
return0;
delete(nodelinkhead,chark){
q=head;
while(((p->
a)!
=k)&
p){
q=q->
else{
k);
voidopside(nodelinkhead){
link){
q=p->
link=q->
link=head->
head->
main()
{
chark1,k2,k3;
nodelinkhead;
head=(nodelink)malloc(sizeof(node));
readlink(head);
link!
=NULL){
printf("
Buildlinkis:
writelink(head);
Pleaseinputacharyouwanttoinsertafter:
k1=getch();
%c\n"
Pleaseinputacharyouwanttoinsert:
k2=getch();
k2);
if(insert(head,k1,k2)){
After%cinsert%c,linkis:
k1,k2);
Pleaseinputacharyouwanttodelete:
k3=getch();
k3);
if(delete(head,k3))
{printf("
afterdelete%c,linkis:
writelink(head);
Opsiteresultis:
opside(head);
free(head);
[运行情况]
lopui↙
lopui
p↙
y↙
Afterpinserty,linkis:
lopyui
afterdeletep,linkis:
loyui
iuyol
三.实习题
用单链表ha存储多项式A(x)=a0+a1x1+a2x2+…+anxn(其中aI为非零系数),用单链表hb存储多项式B(x)=b0+b1x1+b2x2+…+bmxm(其中bj为非零系数),要求计算C(x)=A(x)+B(x),结果存到单链表hc中。
试写出程序。
实验程序:
#include"
stdio.h"
#include<
malloc.h>
stdafx.h"
#include<
staticintn;
staticintm;
staticintmax;
structPolynomial{
floatdata;
structPolynomial*next;
};
structPolynomial*Creat_H(intk){
structPolynomial*L;
structPolynomial*p;
p=(structPolynomial*)malloc(sizeof(structPolynomial));
L=p;
floattemp;
inti;
请依次输入系数(中间用空格隔开):
for(i=0;
i<
=k;
i++){
scanf_s("
%f"
&
temp);
p->
data=temp;
if(i==k){
p->
next=NULL;
break;
}
next=(structPolynomial*)malloc(sizeof(structPolynomial));
p=p->
next;
returnL;
structPolynomial*Calculate(structPolynomial*Pa,structPolynomial*Pb){
structPolynomial*Pc;
max=n>
=m?
n:
m;
Pc=(structPolynomial*)malloc(sizeof(structPolynomial));
L=Pc;
=max;
if(i==max){
Pc->
Pc->
Pc=Pc->
Pc=L;
while(Pa!
=NULL&
Pb!
=NULL){
data=Pa->
data+Pb->
data;
Pa=Pa->
Pb=Pb->
if(Pa==NULL){
while(Pb!
data=Pb->
Pc=Pc->
Pb=Pb->
elseif(Pb==NULL){
while(Pa!
Pa=Pa->
intmain(){
structPolynomial*Ha,*Hb,*Hc;
请输入多项式a的最高次系n:
scanf_s("
%d"
n);
Ha=Creat_H(n);
请输入多项式b的最高次系m:
m);
Hb=Creat_H(m);
Hc=Calculate(Ha,Hb);
系数:
次数:
printf("
%f%-4d\n"
Hc->
data,i);
Hc=Hc->
实验室名称
致远楼
指导教师姓名
张月琴
软件1
树
.一.目的与要求
熟悉树的各种表示方法和各种遍历方式,掌握有关算法的实现,了解树在计算机科学及其它工程技术中的应用。
二.例题
[问题描述]
任意给定一棵二叉树。
试设计一个程序,在计算机中构造该二叉树,并对它进行遍历。
一棵二叉树的结点若无子树,则可将其子树看作“.”,输入时,按照前序序列的顺序输入该结点的内容。
对下图,其输入序列为ABD..EH...CF.I..G..。
A
BC
DEFG
HI
若为空二叉树,则输出:
THISISAEMPTYBINARYTREE。
若二叉树不空,按后序序列输出,对上例,输出结果为:
DHEBIFGCA。
采用二叉链表存储。
采用递归方法建立和遍历二叉树。
首先建立二叉树的根结点,然后建立其左右子树,直到空子树为止。
后序遍历二叉树时,先遍历左子树,后遍历右子树,最后访问根结点。
stdio.h>
alloc.h>
structnode{
charinfo;
structnode*llink,*rlink;
};
typedefstructnodeNODE;
NODE*creat(){
charx;
NODE*p;
x);
x);
if(x!
.'
p=(NODE*)malloc(sizeof(NODE));
info=x;
llink=creat();
rlink=creat();
else
p=NULL;
returnp;
voidrun(NODE*t){
if(t){
run(t->
llink);
rlink);
t->
info);
NODE*T;
PLeaseinputatree:
T=creat();
if(!
T)
Thisisaemptybinarytree."
Theresultofposttraveseis:
\n"
run(T);
编写递归算法,计算二叉树中叶子结点的数目。
structBiTree{
chardata;
structBiTree*lchild;
structBiTree*rchild;
structBiTree*CreatBiTree(){
structBiTree*p;
if(x!
p=(structBiTree*)malloc(sizeof(structBiTree));
data=x;
lchild=CreatBiTree();
rchild=CreatBiTree();
p=NULL;
returnp;
intLeafNum(structBiTree*T){
else
T->
lchild&
!
rchild)
returnLeafNum(T->
lchild)+LeafNum(T->
rchild);
intnum;
structBiTree*T;
请按先序序列输入二叉树\n"
T=CreatBiTree();
while(T==NULL){
empoty,again:
num=LeafNum(T);
\n二叉树叶子结点为:
%d\n"
num);
system("
pause"
图
一.目的与要求
熟悉图的存储结构,掌握有关算法的实现,了解图在计算机科学及其他工程技术中的应用。
给定一个图,设计一个程序,找出一条从某一顶点A到另一顶点B边数最少的一条路径。
图的顶点个数N,图中顶点之间的关系及要找的路径的起点A和终点B。
若A到B无路径,则输出“Thereisnopath”,否则输出A到B路径上各顶点。
图采用邻接矩阵的方式存储。
采用广度优先搜索的方法,从顶点A开始,依次访问与A邻接的顶点VA1,VA2,...,VAK,访问遍之后,若没有访问B,则继续访问与VA1邻接的顶点VA11,VA12,...,VA1M,再访问与VA2邻接顶点...,如此下去,直至找到B,最先到达B点的路径,一定是边数最少的路径。
实现时采用队列记录被访问过的顶点。
每次访问与队头顶点相邻接的顶点,然后将队头顶点从队列中删去。
若队空,则说明到不存在通路。
在访问顶点过程中,每次把当前顶点的序号作为与其邻接的未访问的顶点的前驱顶点记录下来,以便输出时回溯。
intnumber;
typedefstruct{
intq[20];
intf,r;
}queue;
intnodelist[20][20];
queueQ;
intz[20];
inta,b,n,i,j,x,y;
intfinished;
voidenq(queue*Q,intx){
Q->
q[Q->
r]=x;
if(Q->
r==19)
Q->
r=0;
r++;
r==Q->
f)
Overflow!
front(queue*Q){
Underflow!
return(Q->
f]);
voiddeq(queue*Q){
if(Q->
f==19)
Q->
f=0;
else
f++;
intqempty(queueQ){
if(Q.f==Q.r)
return1;
return0;
voidreadgraph(){
\nPleaseinputn:
Pleaseinputnodelist[i][j]:
for(i=1;
i<
=n;
i++){
for(j=1;
j<
j++)
scanf("
nodelist[i][j]);
List-linkisbulit\n"
printf("
%3d"
nodelist[i][j]);
voidshortest(inta,intb){
if(a==b)
nodelist[a][a]=2;
enq(&
Q,a);
finished=0;
while(!
qempty(Q)&
finished){
a=front(&
Q);
deq(&
j=1;
while((j<
=n)&
if((nodelist[a][j]==1)&
(nodelist[j][j]!
=2)){
enq(&
Q,j);
nodelist[j][j]=2;
z[j]=a;
if(j==b)/*&
(nodelist[a][j]==1))*/
finished=1;
}
if(!
finished)
j++;
}
if(!
finished)printf("
Thereisnopath."
voidwritepath(inta,intb){
i=b;
while(i!
=a){
%d<
-"
i);
i=z[i];
a);
readgraph();
Pleaseinputa:
Pleaseinputb:
b);
Q.f=0;
Q.r=0;
shortest(a,b);
if(finished)
writepath(a,b);
采用邻接表存储结构,编写一个求无向图的连通分量个数的算法。
stdlib.h>
intn;
structVNode{
intposition;
structVNode*next;
structArcNode{
intmark;
structVNode*first;
voidDFS(structArcNode*v,structArcNode*w){
structVNode*L;
w->
mark=1;
L=w->
first;
while(L!
if((v+(L->
position))->
mark==0){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太原 理工大学 数据结构 实验 报告