《数据结构本科》课程实验报告书Word文件下载.docx
- 文档编号:20372878
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:29
- 大小:377.52KB
《数据结构本科》课程实验报告书Word文件下载.docx
《《数据结构本科》课程实验报告书Word文件下载.docx》由会员分享,可在线阅读,更多相关《《数据结构本科》课程实验报告书Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。
该选手去掉1最高分和1最低分后的有效评委成绩:
//显示去掉极限分后的评委打分
}
voidinput(NODE*s)
请输入评委的姓名:
"
scanf("
%S"
&
s->
data.name);
年龄:
%d"
data.age);
打分:
%f"
data.score);
}
voidoutput(NODE*s)
{
printf("
评委姓名:
%8s,年龄:
%d,打分:
%2.2f\n"
s->
data.name,s->
data.age,s->
}
NODE*create(intm)
NODE*head,*p,*q;
inti;
p=(NODE*)malloc(sizeof(NODE));
head=p;
q=p;
p->
next=NULL;
for(i=1;
i<
=m;
i++){
input(p);
q->
next=p;
return(head);
}
voidprint(NODE*h)
{for(inti=1;
((i<
=PWRS)&
&
(h->
next!
=NULL));
h=h->
next;
output(h);
intcalc(NODE*h)
NODE*q,*p,*pmin,*pmax;
p=h->
//指向首元结点
pmin=pmax=p;
//设置初始值
sum+=p->
data.score;
p=p->
for(;
p!
=NULL;
p=p->
next)
{
if(p->
data.score>
pmax->
data.score)pmax=p;
data.score<
pmin->
data.score)pmin=p;
cout<
<
"
给出最高分的评委姓名:
data.name<
年龄:
data.age<
分值:
endl;
给出最低分的评委姓名:
sum-=pmin->
sum-=pmax->
for(q=h,p=h->
q=p,p=p->
next)
if(p==pmin){q->
next=p->
p=q;
}//删除最低分结点
if(p==pmax){q->
}//删除最高分结点
ave=sum/(PWRS-2);
该选手的最后得分是:
ave<
return1;
程序运行结果如下:
1.2线性表的顺序存储结构
string.h>
//包含库函数strcpy的头文件
#defineNULL0
structstudent//定义学生信息
{charname[8];
intsex;
//0女:
1:
男
typedefstructstudentSTD;
intcreate(STD*m);
//创建顺序表
intcalc(STD*m,STD*n,STD*r,float&
Fage,float&
Mage);
//计算、数据处理
voidprint(STD*m);
constintMAX=100;
//定义人数
voidmain()
STDA[MAX];
STDB[MAX];
STDC[MAX];
floatage1=0,age2=0;
//age1男age2女
create(A);
学生总表A记录如下:
\n"
print(A);
calc(A,B,C,age1,age2);
女生名册B记录如下:
print(B);
男生名册C记录如下:
print(C);
intcreate(STD*m)
intn;
printf("
请输入班级总人数:
\n"
scanf("
n);
m[0].age=n;
//置顺序表长度
请输入学生信息:
for(inti=1;
=n;
i++)
{
printf("
姓名:
scanf("
%s"
m[i].name);
性别0女1男:
m[i].sex);
m[i].age);
return1;
Mage)
{inti,j=1,k=1;
n[0].age=r[0].age=0;
for(i=1;
=m[0].age;
i++)
{if(m[i].sex==0)
strcpy(n[j].name,m[i].name);
n[j].sex=m[i].sex;
n[j].age=m[i].age;
n[0].age++;
Mage+=m[i].age;
j++;
else
strcpy(r[k].name,m[i].name);
r[k].sex=m[i].sex;
r[k].age=m[i].age;
r[0].age++;
Fage+=m[i].age;
k++;
Mage=Mage/n[0].age;
Fage=Fage/r[0].age;
女生的平均年龄是:
Mage<
男生的平均年龄是:
Fage<
voidprint(STD*m)
printf("
%3s,性别(0女1男):
%d,年龄:
%d\n"
m[i].name,m[i].sex,m[i].age);
}
程序运行结果如下:
实验结束。
实验结论:
线性表采用链式存储(链表)时:
以结构变量存储结点,动态生成结点,以指针链接结点,能有效利用存储空间,插入删除方便,但不能随机访问.单向链表可从某结点访问到后继结点。
单向链表操作的关键步骤:
建立链表的头插法:
指针变量p开辟单元,生成结点,指针变量q始终指向头结点,操作为:
p->
next=q->
尾插法:
指针变量q始终指向尾结点,p指针开辟单元,生成结点:
?
插入:
p所指向结点的后面插入新结点s所指结点s->
next=s;
删除:
p,q指向相邻结点,q所指结点是p所指结点的后继,删除q所指结点,p->
遍历:
实验二栈、列队、递归程序设计
2.1栈和队列的基本操作
#defineMaxSize100
typedefcharElemType;
typedefstruct
ElemTypedata[MaxSize];
inttop;
//栈顶指针
}SeqStack;
//定义栈
ElemTypeelem[MaxSize];
intfront,rear;
//队首和队尾指针
}SqQueue;
//定义队列
//---初始栈函数
voidInitStack(SeqStack*&
s)
s=(SeqStack*)malloc(sizeof(SeqStack));
s->
top=-1;
//----进栈函数
intPush(SeqStack*&
s,ElemTypee)
if(s->
top==MaxSize-1)
return0;
top++;
data[s->
top]=e;
//---显示栈函数
voidDispStack(SeqStack*s)
for(i=s->
top;
i>
=0;
i--)
%c"
data[i]);
//---显示栈底元素
voidDispBottomStack(SeqStack*s)
data[0]);
//先进后出,栈底元素为第一个元素,即data[0]
//---判空栈函数
intStackEmpty(SeqStack*s)
return(s->
top==-1);
//---出栈函数
intPop(SeqStack*&
s,ElemType&
e)
top==-1)
e=s->
top];
top--;
//---初始队列函数
voidInitQueue(SqQueue*&
q)
q=(SqQueue*)malloc(sizeof(SqQueue));
front=q->
rear=0;
//---入队列函数
intInQueue(SqQueue*&
q,ElemTypee)
if((q->
rear+1)%MaxSize==q->
front)//队满
rear=(q->
rear+1)%MaxSize;
elem[q->
rear]=e;
//---出队列函数
intOutQueue(SqQueue*&
q,ElemType&
if(q->
front==q->
rear)//队空
front=(q->
front+1)%MaxSize;
e=q->
front];
//---判空队列函数
intQueueEmpty(SqQueue*q)
return(q->
rear);
//-----主程序
ElemTypee;
SeqStack*s;
(1)初始化栈s\n"
InitStack(s);
(2)栈为%s\n"
(StackEmpty(s)?
空"
:
非空"
));
(3)依次进栈元素a,b,c,d,e\n"
Push(s,'
a'
//入栈元素1
b'
//入栈元素2
c'
//入栈元素3
d'
//入栈元素4
e'
//入栈元素5
(4)栈为%s\n"
(5)从栈顶到栈底元素:
DispStack(s);
(6)栈底元素为:
DispBottomStack(s);
(7)出栈/入队列序列:
SqQueue*q;
InitQueue(q);
while(!
StackEmpty(s))
Pop(s,e);
//出栈
e);
InQueue(q,e);
//入队
(8)栈为%s,"
队列为%s\n"
(QueueEmpty(q)?
(9)出队列/入栈序列:
QueueEmpty(q))
{OutQueue(q,e);
//出队
Push(s,e);
//入栈
(10)栈为%s,"
free(q);
//释放队列
(11)从栈顶到栈底元素:
free(s);
//释放栈
2.2递归程序设计
#include<
math.h>
voidout(intn,inti)//从高位到低位输出函数
intx,y;
y=int(pow(10,i));
if(n!
=0)
x=n/y;
n=n-x*y;
%d"
x);
elseprintf("
0"
i--;
if(i>
=0)out(n,i);
voidout1(intm,intj)//从低位到高位输出函数
intx,z;
if(m!
x=int(m/10);
z=m-x*10;
m=x;
z);
j--;
if(j>
=0)out1(m,j);
intm,n,o,x,i,j;
输入需要排列的数字:
scanf("
o);
m=n=o;
x=n;
i=-1;
while(x!
x=x/10;
i++;
}//求出i为十进制正整数位数
j=i;
从高位到低位逐次输出各位数字:
out(n,i);
从低位到高位逐次输出各位数字:
out1(m,j);
实验结论:
栈和队列是运算受限制的线性表
栈:
后进先出(LIFO)
例:
进栈b,c,d,e,f出栈可能为f,e,d,c,b;
b,c,d,e,f;
c,b,e,d,f•••但不可能是e,d,f,b,c
队列:
先进先出(FIFO)
例:
入队1,2,3,4,5出队1,2,3,4,5
实验三二叉树
3.1二叉树的顺序存储结构和链式存储结构
memory.h>
#defineMaxSize10
typedefstructnode
chardata;
structnode*left,*right;
}NODE;
voidCreab(char*tree,intn,inti,NODE*p);
voidInorder(NODE*p);
NODE*p;
chartree[MaxSize];
intn=1;
inti=1;
请输入完全二叉数的节点值(连续输入字符,以回车结束输入。
):
while((tree[n]=getchar())!
='
\n'
)n++;
tree[n]='
;
p=NULL;
Creab(tree,n,i,p);
Inorder(p);
voidCreab(char*tree,intn,inti,NODE*p)
if(i>
=n)p=NULL;
else
p=(NODE*)malloc(sizeof(NODE));
p->
data=tree[i];
p->
data);
Creab(tree,n,2*i,p->
left);
Creab(tree,n,2*i+1,p->
right);
/*中序遍历树*/
voidInorder(NODE*p)
if(p!
=NULL){
Inorder(p->
data);
3.2二叉树的遍历
voidFirstOrderAccess1(BTree*header)
BTree*stack[MAX_NODE];
BTree*p;
inttop;
top=0;
p=header;
do
while(p!
=NULL)
BTree[%d]=%c“t"
order,p->
rchild!
stack[++top]=p->
rchild;
p=p->
lchild;
if(top!
p=stack[top--];
}while((top>
0)||(p!
实验四图的存储方式和应用
4.1建立图的邻接矩阵
设计程序代码如下:
#defineMaxVertexNum5
#defineMaxEdgeNum20
#defineMaxValue1000
typedefintVertexType;
typedefVertexTypevexlist[MaxVertexNum];
typedefintadjmatrix[MaxVertexNum][MaxVertexNum];
voidCreatel(vexlistGv,adjmatrixGA,intn,inte)
inti,j,k,w;
输入%d个顶点数据\n"
n);
for(i=0;
n;
i++)scanf("
Gv[i]);
for(i=0;
for(j=0;
j<
j++)
{
if(i==j)GA[i][j]=0;
elseGA[i][j]=MaxValue;
Printf(“输入一条边的两端点序号i和j及边上的权w\n”);
输入%d条无向带权边\n"
for(k=1;
k<
=e;
k++){
%d%d%d"
i,&
j,&
w);
GA[i][j]=GA[j][i]=w;
vexlistvl;
adjmatrixa;
Createl(vl,a,5,8);
实验五查找
实验5.1折半查找
#defineN5
structstudent{
charname[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构本科 数据结构 本科 课程 实验 报告书