数据结构实验报告1.docx
- 文档编号:26871664
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:12
- 大小:503.15KB
数据结构实验报告1.docx
《数据结构实验报告1.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告1.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构实验报告1
实验1:
C语言基础练习
一、实验目的
对C语言的复习,增强对结构体数组和指针的学习,尤以结构体的应用和指针的操作作为重点。
二、问题描述
1、构造一个学生结构体数组,成员包括学号,姓名,四门成绩;
2、从键盘上输入学生的学号,姓名和四门成绩;
3、找出学生中考试没有通过的学生姓名并输出;找出考试在90分以上的学生并输出。
三、实验要求
在实验过程中,分析算法的时间复杂度和空间复杂度进行分析。
四、实验环境
VS2010
五、实验步骤
1、用所选择的语言实现算法;
#include
#include
structstudent//构造一个学生结构体数组,成员包括学号,姓名,四门成绩,//以及平均成绩;
{
charname[20];
intnum;
intenglish;
intchinese;
intmath;
inthistory;
};
voidmain()
{
structstudentstu[5];
inti,j;
for(i=0;i<3;++i)
{
printf("输入下一个学§生Θ的信息¢\n");
printf("输入姓名:
阰");
scanf("%s",&stu[i].name);
printf("输入学§号:
阰");
scanf("%d",&stu[i].num);
printf("输入4门学§科的成é绩¨:
阰");
scanf("%d,%d,%d,%d",&stu[i].english,&stu[i].chinese,&stu[i].math,&stu[i].history);
}
printf("不及°格的学§生Θ有瓺:
阰");
for(i=0;i<3;++i)
{
if(stu[i].english<60||stu[i].chinese<60||stu[i].math<60||stu[i].history<60)
{
printf("%s",stu[i].name);
}
}
printf("成é绩¨在ú90分以上的同学§有瓺:
阰");
for(i=0;i<3;++i)
{
if(stu[i].english>=90||stu[i].chinese>=90||stu[i].math>=90||stu[i].history>=90)
printf("%s",stu[i].name);
}
getchar();
getchar();
}
测试程序,并对算法进行时间和空间复杂度分
实验2:
线性表及其应用
一、实验目的
帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的操作和应用作为重点。
二、问题描述
1.构造一个空的线性表L。
2.在线性表L的第i个元素之前插入新的元素e;
3.在线性表L中删除第i个元素,并用e返回其值。
三、实验要求
1、分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线性表的基本操作算法。
2、在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行分析。
四、实验环境
PC微机
DOS操作系统或Windows操作系统
TurboC程序集成环境或VisualC++程序集成环境
五、实验步骤
1、用学生选择的语言,设计出线性表的顺序和链表存储结构;
2、设计出这两种存储结构下的线性表的插入、删除算法;
3、用所选择的语言实现算法;
4、
/myhead.h包悒含自己设定的一些常£量和í类え型í
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include
#include
usingnamespacestd;
#include
constintOK=1;
constintERROR=0;
typedefintstatus;//表括示操ù作痢结á果的状痢态
//sqstack.h
#include"myhead.h"
/////////////////////////
#definestack_max_size100
#definestackincrement10
template
classsqstack
{
public:
voidclear();
intgetlength();
intgetstacksize();
voiddisplay();//栈输出函ˉ数簓
statusgettop(T&e);//读á栈顶元素
boolisempty();
sqstack
statuspop(T&e);//弹獭出栈顶元素到
voidpush(Te);//元a素压栈
//////////////////////////////////
sqstack();
virtual~sqstack();
sqstack(constsqstack
protected:
T*base;//栈底獭指针
T*top;//栈顶指针
intstacksize;//顺3序栈当獭前°已分配的存储洹空间大洙小
};
template
voidsqstack
:
clear()
{
top=base;
}
template
intsqstack
:
getlength()
{
returntop-base;
}
template
voidsqstack
:
display()
{
cout<<"当獭前°栈内ú的元a素为a:
阰";
for(inti=0;i cout< } template intsqstack : getstacksize()//当獭前°存储洹空间的大洙小 { returnstacksize; } template statussqstack : gettop(T&e) { if(isempty()) returnERROR; else e=*(top-1); returnOK; } template boolsqstack : isempty() { return(top==basetrue: false); } template sqstack : operator=(sqstackrights) { intlength=rights.getlength(); if(this! =&rights) { if(stacksize { delete[]base; base=newT[rights.stacksize]; assert(base! =0); stacksize=rights.stacksize; } for(inti=0;i { *(base+i)=*(rights.base+i) } top=base+length; } return*this; } template statussqstack : pop(T&e)//出栈 { if(isempty()) returnERROR; else e=*--top; returnOK; } template voidsqstack : push(Te) { intlength=top-base; T*newbase; if(top-base>=stacksize) { newbase=newT[stacksize+stackincrement]; assert(newbase! =0); for(intj=0;j *(newbase+j)=*(base+j); delete[]base; stacksize+=stackincrement; base=newbase; top=base+length; } *top=e; ++top; } ////////////////////////////////////// template sqstack : sqstack() { base=newT[stack_max_size]; assert(base! =0); stacksize=stack_max_size; top=base; } template sqstack : ~sqstack() { if(base) delete[]base; stacksize=0; top=base=NULL; } template sqstack : sqstack(constsqstack&others) { intlength=others.top-others.base;//length的大洙小定¨了? base=newT[others.stacksize]; assert(base! =0); stacksize=others.stacksize; for(inti=0;i *(base+i)=(others.base+i); top=base+length; } //mian.cpp #include"sqstack.h" #include usingnamespacestd; //////////////////////////////// intmain() { intsize=5,e; intde; sqstack for(inti=0;i { cout<<"要癮进栈的元a素: "; cin>>e; cout< stack.push(e); } stack.display(); cout< stack.gettop(de); cout<<"弹獭出的栈顶¥元a素为a: 阰"< stack.pop(de); //cout< //cout<<"弹獭出后ó栈内ú的元a素为a: 阰"< stack.display(); system("PAUSE"); return0; } 5、测试程序,并对不同存储结构下的算法分析。 六、测试数据和分析 1、插入操作: 输入数据: L=()ListInsert(L,1,'k'), 正确结果: L=(k) 输入数据: L=(EHIKMOP)ListInsert(L,9,'t'), 正确结果: returnERROR;L=(EHIKMOP) 输入数据: L=(ABCEHKNPQTU)ListInsert(L,4,'u'), 正确结果: L=(ABCuEHKNPQTU) 2、删除操作: 输入数据: L=()ListDelete(L,1,e) 正确结果: ERROR,L=() 输入数据: L=(DEFILMNORU)ListDelete_Sq(L,5,e) 正确结果: L=(DEFIMNORU),e='L' 输入数据: L=(CD)ListDelete_Sq(L,1,e) 正确结果: L=(D),e='C' 3、如线性表有n个结点,对两种存储结构下插入和删除的时间复杂度进行分析。 七、实验报告要求 实验报告应包括以下几个部分: 1、问题描述; 2、设计两种存储结构与核心算法描述; 3、测试结果的分析与讨论,在测试过程中遇到的主要问题及采取的解决措施。 4、设计与实现过程中的体会,进一步的改进设想。 5、实现算法的程序清单,应有足够的注释。 八、思考题 1、如何实现链表的逆置算法?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告