数据结构实践题及答案Word文档格式.docx
- 文档编号:20633918
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:84
- 大小:292.31KB
数据结构实践题及答案Word文档格式.docx
《数据结构实践题及答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实践题及答案Word文档格式.docx(84页珍藏版)》请在冰豆网上搜索。
二、课程类型
课程类型:
必修课。
适用专业:
计算机系各专业
实验学时:
10学时
三、本课程的地位、作用与任务
《数据结构》在计算机科学中是一门综合性的专业基础课。
数据结构的研究不仅涉及到计算机硬件的研究范围,而且和计算机软件的研究有密切的关系,可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。
在计算机科学中,数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础,它的主要任务是讨论各种数据结构的逻辑结构,存储结构及有关操作的算法。
目的是使学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,并初步了解对算法的时间分析和空间分析技术。
另一方面,通过对本课程算法设计和上机实践的训练,还应培养学生的数据抽象能力和程序设计的能力。
从而为提高学生的实际分析问题和解决问题的编程能力打下基础。
四、课程基本要求
1、学生应根据每个上机实验的任务和教师所提的要求,上机前准备好上机内容。
2、上机输入程序并调试出结果。
3、上机结束后应按时提交实验报告,对于上机未完成部分,应该下机后利用课余时间完成。
实验报告包括以下内容:
(1)实验题目:
(2)实验日期:
(3)实验目的:
(4)实验要求:
(5)实验内容:
(6)实验总结:
五、实验安排
1、数据结构实验机器与环境
(一)计算机的硬件配置
PC系列微机,包括286、386、486、奔腾及各种兼容机,要求内存为64M以上,一个硬盘驱动器和一个软盘驱动器。
80列字符监视器。
配备鼠标器。
(二)计算机的软件配置
DOS6.22或Windows98、Windowsxp、Windows2000;
VC++6.0或TurboC。
2、VisualC++6.0开发C语言程序
(一)进入C++工作环境
双击Windows桌面上的VisualC++6.0图标或单击Windows桌面上“开始”按钮,在“程序”中选择“VisualC++6.0”运行即可。
(二)编译、运行C程序
创建一个新的工程文件(Projectfile)
启动VisualC++6.0编译系统后,出现“MicrosoftDeveloperStudio”窗口,该窗口菜单条有9个菜单项(如图1所示):
(1)
单击“File”菜单,在其下拉菜单中选择“New”,屏幕上出现一个“New”对话框,在该对话框中选择“Projects”标签,出现“Project”对话框。
(2)选择工程类型为“Win32ConsoleApplication”,这时,在右边的Platforms选框中就会出现Win32。
(3)输入工程名字。
在“Projectname”选框中输入所指定的工程文件名字,例如:
1st。
(4)输入路径名。
在“Location”选框中,输入你将要把所建立的工程文件放人何处的路径名。
例如,要将工程文件放在E盘下已建立好的子目录E:
\sw1\001子目录中,所以该选取路径为:
E:
\sw1\001\1st。
选择“OK”按钮,该工程文件已建立。
图1创建新的工程文件
建立源文件
再次选择“File”菜单中的“New”选项,在四个标签中选择“File”标签,在其对话框选项中,选择“C++SourceFile”,并在右边的Addproject的选择框内打勾,激活其下面的选项,然后在File框内输入源文件名(如1st),单击“OK”按钮,出现编辑屏幕,即可编写程序(如图2和图3所示)。
图2建立源文件
图3编辑源文件
编译连接和运行源程序
程序编好后要进行编译连接和运行,步骤如下:
(1)选择“Build”菜单,单击下拉菜单中的“Compile1st.cpp”,这时系统开始对当前的源程序进行编译,在编译过程中,将所发现的错误显示在屏幕下方的“Build”窗口中。
根据错误提示,修改程序后再重新编译,如还有错误,再继续修改、编译,直到没有错误为止。
(2)编译无误后进行连接,这时选择“Build”菜单中的“Build1st.exe”选项。
同样,对出现的错误要进行更改,直到编译连接无错为止。
这时,在“Build”窗口中会显示如下信息:
1st.obj-0error(s),0warning(s),说明编译连接成功,并生成以源文件名为名字的可执行文件(1st.exe)。
(3)运行程序,选择“Build”菜单中的“!
Execute1st.exe”选项。
这时,会出现一个“MS-DOS”窗口,输出结果显示在该窗口中(如图4和图5所示)。
(4)运行结束后,可以回到“File”菜单,点击“CloseWorkspace”选项,关闭当前文件窗口。
若要编辑新的源程序,可以再次打开“File”菜单,重新建立工程文件,步骤如上所述;
也可以点击“File”菜单中的“OpenWorkspace”选项,打开一个已经存在的源文件。
图4编辑运行源程序
图5编译连接及结果
3、上机实验
线性表操作
1.实验目的
1、会定义线性表的顺序存储类型。
2、熟悉C或C++程序的基本结构,掌握程序中的用户头文件、实现文件和主文件之间的相互关系及各自的作用。
3、熟悉对线性表的一些基本操作和具体的函数定义。
4、熟悉TurboC或VC操作环境的使用以及多文件程序的输入、编辑、调试和运行的全过程。
2.实验要求
1、认真阅读和掌握本实验内容所给的全部程序。
2、从本实验内容中任选一个程序上机运行。
3、保存和打印出程序运行结果,并结合程序进行分析。
4、按照你对线性表操作的需要,重新改写主文件并运行,打印出文件清单和运行的结果。
3.实验内容
该程序的功能是对元素类型为整型的顺序存储的线性表进行一些操作。
该程序包含三个文件,一个为头文件,用来存储定义的线性表结构类型以及对线性表进行的各种操作的函数声明;
第二个为线性表操作的实现文件,用来存储每一种线性表操作的具体函数定义;
第三种为主文件,用来定义线性表和调用线性表的一些操作,实现对给定线性表的具体运算。
整个程序如下:
//头文件linearlist1.h
//定义ElemType为int类型
typedefintElemType;
//线性表顺序存储类型
structLinearList
{
ElemType*list;
//存线性表元素
intsize;
//存线性表长度
intMaxSize;
//存list数组长度
};
//初始化线性表
voidInitList(LinearList&
L,intms);
//清空线性表
voidClearList(LinearList&
L);
//求线性表长度
intListSize(LinearList&
//检查线性表是否为空
boolListEmpty(LinearList&
//检查线性表是否为满
boolListFull(LinearList&
//遍历线性表
voidTraverList(LinearList&
//从线性表中查找元素
boolFindList(LinearList&
L,ElemType&
item);
//更新线性表中的给定元素
boolUpdateList(LinearList&
L,constElemType&
//向线性表插入元素
boolInsertList(LinearList&
item,intmark);
//从线性表中删除元素
boolDeleteList(LinearList&
//对线性表进行有序输出
voidOrderOutputList(LinearList&
L,intmark);
//实现文件linearlist1.cpp
#include<
iomanip.h>
stdlib.h>
#include"
linearlist1.h"
voidInitList(LinearList&
L,intms)
L.list=newElemType[ms];
if(!
L.list){
cerr<
"
Memoryallocationfailure!
endl;
exit
(1);
}
L.size=0;
L.MaxSize=ms;
}
voidClearList(LinearList&
L)
intListSize(LinearList&
returnL.size;
boolListEmpty(LinearList&
returnL.size==0;
boolListFull(LinearList&
returnL.size==L.MaxSize;
voidTraverList(LinearList&
for(inti=0;
i<
L.size;
i++)cout<
L.list[i]<
'
'
;
cout<
boolFindList(LinearList&
item)
i++)
if(L.list[i]==item){
item=L.list[i];
returntrue;
}
returnfalse;
boolUpdateList(LinearList&
L.list[i]=item;
//向线性表的表头、表尾或合适位置插入元素
boolInsertList(LinearList&
item,intmark)
if(ListFull(L))returnfalse;
if(mark>
0){
for(inti=L.size-1;
i>
=0;
i--)
L.list[i+1]=L.list[i];
L.list[0]=item;
elseif(mark<
0)L.list[L.size]=item;
else{for(inti=0;
if(item<
L.list[i])break;
for(intj=L.size-1;
j>
=i;
j--)
L.list[j+1]=L.list[j];
L.list[i]=item;
L.size++;
returntrue;
//从线性表中删除表头、表尾或等于给定值的元素
boolDeleteList(LinearList&
item,intmark)
if(ListEmpty(L))returnfalse;
item=L.list[0];
for(inti=1;
L.list[i-1]=L.list[i];
0)item=L.list[L.size-1];
else{for(inti=0;
if(L.list[i]==item)break;
if(i>
=L.size)
returnfalse;
elseitem=L.list[i];
for(intj=i+1;
j<
j++)
L.list[j-1]=L.list[j];
L.size--;
//对线性表按升序或降序输出
voidOrderOutputList(LinearList&
L,intmark)
int*b=newint[L.size];
inti,k;
for(i=0;
i++)b[i]=i;
for(i=1;
i++){
k=i-1;
for(intj=i;
j++){
if(mark==1&
&
L.list[b[j]]<
L.list[b[k]])k=j;
//升序
if(mark!
=1&
L.list[b[k]]<
L.list[b[j]])k=j;
//降序
if(k!
=i-1){intx=b[i-1];
b[i-1]=b[k];
b[k]=x;
cout<
L.list[b[i]]<
//主文件listmain1.cpp
//要用到格式控制符
constintML=10;
voidmain()
LinearLista;
InitList(a,ML);
inti;
ElemTypex;
//依次向线性表a表尾插入5个整数元素
从键盘输入5个整数:
5;
cin>
>
x;
InsertList(a,x,-1);
//依次向线性表a表头插入2个整数元素
从键盘输入2个整数:
cin>
InsertList(a,x,1);
//按不同次序遍历输出线性表a
TraverList(a);
OrderOutputList(a,1);
OrderOutputList(a,0);
//把线性表a中的所有元素依次有序插入到一个新线性表b中"
LinearListb;
InitList(b,ML);
a.size;
InsertList(b,a.list[i],0);
//输出线性表b
TraverList(b);
//从线性表a中分别删除表头、表尾、给定值元素
if(DeleteList(a,x,1))cout<
Deletesuccess!
elsecout<
Deletefail!
if(DeleteList(a,x,-1))cout<
从键盘上输入一个待删除的整数:
if(DeleteList(a,x,0))cout<
//输出线性表a
单链表操作
1、会定义单链表的结点类型。
2、悉对单链表的一些基本操作和具体的函数定义。
3、了解和掌握单链表的类定义以及成员函数的定义与调用格式。
4、按照你对单链表操作的需要,重新改写主文件并运行,打印出文件清单和运行的结果。
当然也可以根据你的需要改写或增删单链表操作的函数。
下面三个程序都是用来实现单链表的定义和操作,每个程序均由头文件、实现文件和主文件。
第一个程序中的单链表结点为结构类型,结点的值为整型;
第二个程序中的单链表结点同样为结构类型,结点的值为student结构类型;
第三个程序中的单链表采用类的定义,操作函数为类中的成员函数,单链表中每个结点的值为整型。
整个程序如下:
//头文件linklist1.h
//定义ElemType为int
//单链表中结点的类型
structLNode{
ElemTypedata;
//值域
LNode*next;
//指针域
//初始化单链表
voidInitList(LNode*&
HL);
//清空单链表
voidClearList(LNode*&
//求单链表长度
intListSize(LNode*HL);
//检查单链表是否为空
boolListEmpty(LNode*HL);
//返回单链表中指定序号的结点值
ElemTypeGetElem(LNode*HL,intpos);
//遍历单链表
voidTraverseList(LNode*HL);
//从单链表中查找元素
boolFindList(LNode*HL,ElemType&
//更新单链表中的给定元素
boolUpdateList(LNode*HL,constElemType&
//向单链表插入元素
voidInsertList(LNode*&
HL,constElemType&
//从单链表中删除元素
boolDeleteList(LNode*&
HL,ElemType&
//对单链表进行有序输出
voidOrderOutputList(LNode*HL,intmark);
//实现文件linklist1.cpp
iostream.h>
linklist1.h"
voidInitList(LNode*&
HL)
HL=NULL;
voidClearList(LNode*&
LNode*cp,*np;
cp=HL;
while(cp!
=NULL)
{
np=cp->
next;
deletecp;
cp=np;
intListSize(LNode*HL)
LNode*p=HL;
inti=0;
while(p!
=NULL){
i++;
p=p->
returni;
boolListEmpty(LNode*HL)
return(HL==NULL);
ElemTypeGetElem(LNode*HL,intpos)
if(pos<
1){
posisoutrange!
if(i==pos)break;
if(p!
=NULL)
returnp->
data;
else{
voidTraverseList(LNode*HL)
p->
data<
"
boolFindList(LNode*HL,ElemType&
item)
if(p->
data==item){
item=p->
else
p=p->
boolUpdateList(LNode*HL,constElemType&
=NULL)//查找元素
data==item)
break;
else
if(p==NULL)
else{//更新元素
p->
data=item;
returntrue;
voidInsertList(LNode*&
//建立一个值为item的新结点
LNode*newptr;
newptr=newLNode;
newptr->
//向表头插入结点
0){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实践 答案