实验报告线性表的顺序表示和实现.docx
- 文档编号:2822656
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:8
- 大小:95.71KB
实验报告线性表的顺序表示和实现.docx
《实验报告线性表的顺序表示和实现.docx》由会员分享,可在线阅读,更多相关《实验报告线性表的顺序表示和实现.docx(8页珍藏版)》请在冰豆网上搜索。
实验报告线性表的顺序表示和实现
数学与计算科学学院
实验报告
实验项目名称:
线性表的顺序表示和实现
所属课程名称:
数据结构A
实验类型:
验证性
实验日期:
2012年4月5号
班级:
学号:
姓名:
成绩:
一、实验概述:
【实验目的】
(1)、线性表的逻辑结构特征。
①、总存在第一个和最后一个元素。
②、除第一个元素以外,每一个元素总存在唯一一个直接前驱元素。
③、除最后一个元素以外,每一个元素总存在唯一一个直接后驱元素。
(2)、顺序表的特征。
①、逻辑关系上相邻的物理位置上也相邻。
②、是一种随机存储结构,可以用一个简单直观的公式来表示每一个元素的地址。
(3)、通过上机实验验证线性表的顺序结构的正确性,了解算法与程序的区别。
【实验原理】
//--------线性表的动态分配顺序存储结构-----------
#defineLIST_INIT_SIZE5//线性表存储空间的初始分配量
#defineLISTINCREMENT2//线性表存储空间的分配增量
typedefstruct{
ElemType*elem;//存储空间基址
intlength;//当前长度
intlistsize;//当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;
【实验环境】
实验的环境:
VC++
二、实验内容:
【实验方案】
编写主函数,调用初始化,建立顺序表的算法以及插入和删除算法。
调试
运行输入数据得出结果并进行分析。
【实验过程】(实验步骤、记录、数据、分析)
实验步骤:
(1)、在VC++环境下输入各个算法和主函数。
(2)、输完以上的东西后,再对程序进行编译。
编译完后主要出现以下几个主要错误:
①、算法和函数中出现了一些系统无法识别的变量,照成程序出现了错误。
②、程序中出现了这样的错误:
D:
\软件\MicrosoftVisualC++V6.0简体中文企业版\Cpp1.cpp(50):
errorC2018:
unknowncharacter'0xa3
③、程序中的错误:
D:
\软件\MicrosoftVisualC++V6.0简体中文企业版\Cpp1.cpp(8):
errorC2144:
syntaxerror:
missing';'beforetype'int'
④、在程序中还出现了大量的输入的错误。
比如大小写的问题,前后的
函数名不一致的问题等等。
编译完成以后,接下来是找到错误进行调试。
调试过程中找出错误的原因,然后进行分析。
发生错误的主要原因如下:
①、在输入程序的过程中由于粗心造成了大量的输入错误。
②、没有注意算法与源程序的区别。
算法是简单的对源程序进行描述的,是给人阅读的,所以有些变量没有定义我们就能看懂。
而程序中的变量一定要先定义才能够被引用,才能被计算机识别。
③、强制类型转换也是C语言中的一个语句,所以语句完成以后后面要加分号来表示语句结束。
所以才会出现第三的错误。
④、在C程序的输入过程中。
一律要在英文字母的条件下进行输入,否则就会出现第二种错误,使系统无法识别。
(3)、调试完成以后,程序中没有了错误。
然后执行。
在命令窗口中输入数据进行验证。
出现了如下图所示的错误:
在进行删除的算法的过程中,最后那个数字“5”出现了两次,与实验要求的结果不一致。
后来经老师的指点,找出了原因的所在。
原因:
在执行删除算法以后,变长要减1.经改正以后得出了正确的结论。
最后成功完成了实验,得出了正确的结果。
【实验结论】(结果)
实验的结果如下图:
【实验小结】(收获体会)
第一点:
在变写算法和程序的过程是一个心细的过程,一定要注意每一个细节,
要不然就会出现很多错误,得不到自己想要的结果。
第二点:
要熟练的掌握有关C语言的知识,要充分明白算法与程序的区别,在
编写程序的过程中要保持清醒的头脑,时刻注意那些容易出错的地
方。
第三点:
每次进行删除算法之后表长都要减一。
否则会造成数据冗余,浪费
内存。
第四点:
最终的收获是我已经掌握了顺序表的建立及相关算法的操作。
三、指导教师评语及成绩:
评语
评语等级
优
良
中
及格
不及格
1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强
2.实验方案设计合理
3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)
4实验结论正确.
成绩:
指导教师签名:
批阅日期:
附录1:
源程序
#include
#include
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus;
typedefintElemType;
#defineLIST_INIT_SIZE5//初始分配存储量
#defineLISTINCREMENT2//分配增量
typedefstruct{
ElemType*elem;//存储空间基址
intlength;//当前长度
intlistsize;//当前分配存储量
}Sqlist;
StatusInitList_Sq(Sqlist&L){
//构造一个空的线性表L
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)exit(OVERFLOW);//存储分配失败
L.length=0;//空表长度为0
L.listsize=LIST_INIT_SIZE;//初始存储容量
returnOK;
}
StatusListInsert_Sq(Sqlist&L,inti,ElemTypee){
//在线性表L中第i个元素之前插入元素e,i的合法值为1<=i<=ListLength_Sq(L)+1
ElemType*newbase,*p,*q;//定义变量p,q
if(i<1||i>L.length+1)returnERROR;//i值不合法
if(L.length>=L.listsize){//当前空间满,增加分配
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)exit(OVERFLOW););//存储分配失败
L.elem=newbase;//新基址
L.listsize+=LISTINCREMENT;//增加存储容量
}
q=&(L.elem[i-1]);//q为插入位置
for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;//插入e,表长增1
returnOK;
}
StatusListDelete_Sq(Sqlist&L,inti,ElemType&e){//在线性表L中删除第i个元素,并用e返回其值,i的合法值为1<=i<=ListLength_Sq(L)
ElemType*p,*q;//定义变量p,q
if((i<1)||(i>L.length))returnERROR;//i值不合法
p=&(L.elem[i-1]);//p为被删除元素位置
e=*p;//被删除元素值赋给e
q=L.elem+L.length-1;//表尾元素的位置
for(++p;p<=q;++p)*(p-1)=*p;//后面元素左移
--L.length;//表长减1
returnOK;
}
voidmain()
{SqlistL;inti;InitList_Sq(L);//构造一个空的线性表L
for(i=0;i {scanf("%d",&L.elem[i]); ++L.length;}//输入数据 for(i=0;i //输出表中的数据 printf("\n"); ElemTypee;scanf("%d""%d",&i,&e); ListInsert_Sq(L,i,e); //在线性表L中第i个元素之前插入元素e for(i=0;i printf("%d",L.elem[i]);//输出新的线性表中的数据 printf("\n"); scanf("%d",&i);ListDelete_Sq(L,i,e); //在线性表L中删除第i个元素,并用e返回其值 for(i=0;i //输出新的线性表表中的数据 printf("\n"); printf("e=%d\n",e); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 线性 顺序 表示 实现