数据结构实验报告.docx
- 文档编号:5086534
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:16
- 大小:237.58KB
数据结构实验报告.docx
《数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构实验报告
徐州工程学院
管理学院实验报告
实验课程名称:
数据结构与算法
实验地点:
经济管理教学实验中心
年月至年月
专业
班级
学生姓名
学号
指导老师
实验报告
实验项目:
线性表及其应用
实验学时:
2
实验日期:
实验要求:
熟悉并掌握单链表的存储及基本算法的使用
实验内容:
单链表就地逆置
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#definemsizeof(structLnode)
typedefstructLnode{
intdata;
structLnode*next;
};
structLnode*LinkList;
structLnode*p218,*q218,*head;
voidbuild()
{inti218;
head=(structLnode*)malloc(m);
p218=head;
for(i218=1;i218<4;i218++)
{
p218->data=i218;
p218->next=(structLnode*)malloc(m);
p218=p218->next;
}
p218->data=4;
p218->next=NULL;
}
voiddisplay()
{p218=head;
while(p218->next!
=NULL)
{
printf("%d",p218->data);
p218=p218->next;
}
printf("%d",p218->data);
}
voidJiudi(){
structLnode*p218,*q218,*r218;
p218=head;
q218=p218->next;
while(q218!
=NULL){
r218=q218->next;
q218->next=p218;
p218=q218;
q218=r218;
}
head->next=NULL;
head=p218;
}
voidmain(){
build();
display();
Jiudi();
printf("\n");
display();
getch();
}
运行结果:
实验项目:
栈的应用
实验学时:
2
实验日期:
实验要求:
熟悉并掌握利用栈的特性进行相关运算
实验内容:
回文判断
#include
#include
#defineMAXSIZE100
typedefstruct
{
chardata[MAXSIZE];
inttop218;
}seqstack;
seqstack*init_seqstack()
{
seqstack*s218;
s218=malloc(sizeof(seqstack));
s218->top218=-1;
returns218;
}
voidinputstack(seqstack*s218,charx){
if(s218->top218==MAXSIZE-1)
{
printf("Thestackisfull!
");
return;
}
else
{
s218->top218++;
s218->data[s218->top218]=x;
}
}
intoutputstack(seqstack*s218){
intn218;
n218=s218->top218;
for(;s218->top218>=n218/2;s218->top218--){
if(s218->data[s218->top218]!
=s218->data[n218-s218->top218])break;
}
if(s218->top218>=n218/2)
return0;
else
return1;
}
voidmain()
{
intflag218=1,n218=0;
charx218;
seqstack*s218;
s218=init_seqstack();
while(flag218)
{
scanf("%c",&x218);
if(x218=='#')
{
flag218=0;
if(outputstack(s218))
printf("yes!
");
else
printf("no!
");
}
if(x218!
='\n'){
inputstack(s218,x218);}
}
getch();
}
实验结果:
实验项目:
数组的应用
实验学时:
4
实验日期:
实验要求:
熟悉并掌握矩阵压缩存储的算法
实验内容:
矩阵压缩存储
#include
#definemaxsize12500
#defineelemtypeint
typedefintstatus;
typedefstruct
{
inti218,j218;
elemtypee;
}triple;
typedefstruct
{
tripledata[maxsize+1];
intmu,nu,tu;
}tsmatrix;
tsmatrixcreatematrix()
{
tsmatrixM;
intn218;
printf("输入矩阵的行数,列数,非零元个数:
\n");
scanf("%d%d%d",&M.mu,&M.nu,&M.tu);
printf("输入非零元的值(行数、列数和值):
\n");
for(n218=1;n218<=M.tu;n218++)
scanf("%d%d%d",&M.data[n218].i218,&M.data[n218].j218,&M.data[n218].e);
returnM;
}
voidprint(tsmatrixM)
{
intx218,y218,n218,k218;
for(x218=1;x218<=M.mu;x218++)
{
for(y218=1;y218<=M.nu;y218++)
{
k218=0;
for(n218=1;n218<=M.tu;n218++)
if((M.data[n218].i218==x218)&&(M.data[n218].j218==y218))
{
printf("%3d",M.data[n218].e);
k218=1;
}
if(k218==0)
printf("%3d",k218);
}
printf("\n");
}
}
voidmain()
{
tsmatrixM;
M=creatematrix();
printf("M矩阵为:
\n");
print(M);
getch();
}
运行结果:
实验项目:
树的应用
实验学时:
2
实验日期:
实验要求:
熟悉并掌握建立树及利用二叉树遍历算法进行其他操作
实验内容:
二叉树的叶子结点计算
#include
#include
#include
#defineOK1
#defineOVERFLOW-1
typedefcharElemtype;
typedefstructNode
{Elemtypedata;
structNode*lchild,*rchild;
}BiTree;
voidpreorder(BiTree*T218)
{if(T218!
=NULL)
{
printf("%c",T218->data);
preorder(T218->lchild);
preorder(T218->rchild);
}
}
crt_bt_pre()
{BiTree*T218;
Elemtypech218;
printf("ch218=");
scanf("%c",&ch218);
if(ch218=='')
T218=NULL;
else{
T218=(BiTree*)malloc(sizeof(BiTree));
T218->data=ch218;
T218->lchild=crt_bt_pre(T218->lchild);
T218->rchild=crt_bt_pre(T218->rchild);
}
returnT218;
}
intleafCount(BiTree*T218)
{
if(!
T218)
return0;
elseif(!
T218->lchild&&!
T218->rchild)
return1;
else
return(leafCount(T218->lchild)+leafCount(T218->rchild));
}
voidmain(){
intc218;
BiTree*T218;
T218=crt_bt_pre();
printf("\n二叉树的前序遍历为:
");
preorder(T218);
c218=leafCount(T218);
printf("\n叶子个数为:
");
printf("%d",c218);
}
运行结果为:
实验项目:
图的应用
实验学时:
2
实验日期:
实验要求:
熟悉并掌握图的构造算法的使用
实验内容:
有向图的邻接表存储
#include
#include
#defineMAX50
typedefstructe_node
{intadjvex;
intweight;
structe_node*next;
}E_NODE;
typedefstructv_node
{intvertex;//顶点信息
E_NODE*link;
}V_NODE;
V_NODEhead[MAX];
voidcreat_adj_list(V_NODEhead[])
{
inti218,n218;
intw218=1,v218=1;
E_NODE*p,*q;
printf("请输入顶点数目n218:
");
scanf("%d",&n218);
for(i218=1;i218<=n218;i218++)
{head[i218].link=NULL;
head[i218].vertex=i218;
}
while((v218>=0)&&(w218>0))
{
printf("请输入弧起点v218:
");
scanf("%d",&v218);
printf("请输入弧终点w218:
");
scanf("%d",&w218);
if((v218>n218)||(w218>n218))continue;
if((v218>0)&&(w218>0))
{
p=(E_NODE*)malloc(sizeof(E_NODE));
p->adjvex=w218;
p->next=head[v218].link;
head[v218].link=p;
}
}
for(i218=1;i218<=n218;i218++)
{
printf("\nv218=%d\t",head[i218].vertex);
for(q=head[i218].link;q!
=NULL;q=q->next)
{
printf("w218=%d\t",q->adjvex);
}
}
}
voidmain()
{
creat_adj_list(head);
getch();
}
运行结果为:
实验项目:
查找和排序算法应用
实验学时:
4
实验日期:
实验要求:
熟悉并掌握查找和排序算法的使用
实验内容:
对某字符串进行排序,并在此基础上利用查找算法进行查找
#include"stdio.h"
#include"malloc.h"
typedefstruct{
charkey;
}create;
createst[26];
voidpaixu(createst[]){
inti218,j218;
chart218;
for(i218=0;i218<=25;i218++)
{
for(j218=0;j218<=25-i218;j218++)
{
if(st[j218].key>st[j218+1].key)
{
t218=st[j218].key;
st[j218].key=st[j218+1].key;
st[j218+1].key=t218;
}
}
}
for(i218=1;i218<=26;i218++)
printf("%c",st[i218]);
}
intbinsrch(createst[],chark218)
{
intlow218,high218,mid218,found218;
low218=1;high218=26;found218=0;
while((low218<=high218)&&(found218==0))
{
mid218=(low218+high218)/2;
if(k218>st[mid218].key)low218=mid218+1;
elseif(k218==st[mid218].key)found218=1;
elsehigh218=mid218-1;
}
if(found218==1)return(mid218);
elsereturn(0);
}
voidmain(){
intn218;
chark218;
printf("输入26个字母:
\n");
gets(st);
printf("排序后的序列为:
\n");
paixu(st);
printf("\n请输入想查找的字符:
");
scanf("%c",&k218);
printf("你所查找的数为:
%c",k218);
n218=binsrch(st,k218);
printf("\n所在位置为:
%d",n218);
getch();
}
运行结果:
实验总结
《数据结构》课程已经结课了,对于数据结构也已经有了一知半解。
本学期上机课共做了九个实验。
实验报告包括了六个。
对于这些实验,我并不都是自己独立完成的,而是通过查找一些资料,以及与同学一起讨论完成。
我感觉自己在这科课程方面还有待提高,虽然以及结课了,但我感觉在以后的学习中还是会用到数据结构的知识。
所以我还是会在课余的时间巩固知识,加强训练,学以致用,绝不会考完全忘记!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告