实验题1:实现顺序表各种基本运算的算法
一、实验目的
领会顺序表存储结构和掌握顺序表中各种基本运算算法设计。
二、实验环境
VC++6.0
三、实验准备
(1)复习课件中理论知识
(2)练习课堂所讲的例子
四、实验内容
编写一个程序SqList.cpp,实现顺序表的各种基本运算(假设顺序表的数据元素类型ElemType为char),并在此基础上设计一个主程序exp1.cpp,完成如下功能:
(1)初始化顺序表L;
(2)依次插入a、b、c、d、e元素;
(3)输出顺序表L;
(4)输出顺序表L长度;
(5)判断顺序表L是否为空;
(6)输出顺序表L的第3个元素;
(7)输出元素a的位置;
(8)在第4个位置上插入f元素;
(9)输出顺序表L;
(10)删除顺序表L的第3个元素;
(11)输出顺序表L;
(12)释放顺序表L。
五、实验步骤
1.按照老师上课所讲和钉钉所下发的PPT进行学习、理解。
2.使用Dev-C++进行代码的输入编译。
3.分析代码在输入过程中产生的问题,并对其进行修改。
4.运行代码,发现无法输出等问题,进行调试。
5.按照要求输入,分析结果的正确性。
6.完成实验报告。
六、实验总结
在进行学习时,有一些问题可以理解,但是无法正确使用,需要反复的进行学习,钻研。写代码的时候,分析钉钉下发的PPT后,将其char类型改成了int类型并进行了代码的输入,在多次发现问题,调试,修改代码后,成功解决问题。本次实验反应了本人对知识点掌握不够透彻,还需要继续深入的理解。
附:源代码
#includeiostream
#includecstdio
#includealgorithm
usingnamespacestd;
#defineL_I_S
#defineLIS10
#defineOK1
#defineERROR0
#defineTURE1
#defineFALSE0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintstatus;
typedefintElemType;
typedefstruct
{
ElemType*elem;//储存空间基地址
intlength;//长度
intlistsize;//储存容量
}SqList;
statusInitList_Sq1(SqListL)//构造一个空的线性表
{
L.elem=(ElemType*)malloc(L_I_S*sizeof(ElemType));//分配内存空间
if(!L.elem)exit(OVERFLOW);//储存失败
L.length=0;
L.listsize=L_I_S;
return1;
}
statusListInsert(SqListL,inti,ElemTypee)//在i位置插入元素e
{
if(i1
iL.length+1)returnERROR;//如果数据不合法,出错
if(L.length=L.listsize)//如果容量不够,重新申请空间
{
ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LIS)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);//储存空间申请失败
L.elem=newbase;
L.listsize+=LIS;
}
ElemType*p,*q;
q=(L.elem[i-1]);//q的地址为最后一个元素的地址
for(p=(L.elem[L.length-1]);p=q;p--)//从头文件开始往后找,到最后一个元素后停止
*(p+1)=*p;
*q=e;//插入元素
++L.length;//长度加1
returnOK;
}
statusListOutsert(SqListL)//输出顺序表
{
inti;
for(i=0;iL.length;i++)
coutL.elem;
}
statusListLength(SqListL)//输出表长度
{
returnL.length;
}
boolListEmpty(SqListL)//判断表是否为空
{
if(L.length==0)returntrue;
elsereturnfalse;
}
statusGetELem(SqListL,inti,ElemTypee)//返回第i个元素的值
{
ElemType*p;
p=(L.elem[i-1]);
e=*p;
returnOK;
}
statusListDelete(SqListL,inti,ElemTypex)//删除第i个元素
{
if(i1
iL.length)returnERROR;
ElemType*p,*q;
p=(L.elem[i-1]);
x=*p;
q=L.elem+L.length-1;
for(++p;p=q;++p)
*(p-1)=*p;
--L.length;
returnOK;
}
statusList(SqListL,inta)//输出元素a的位置
{
ElemType*p,*q;
for(inti=0;iL.length;i++)
if(a==L.elem)
returni+1;
}
statusListInsert(SqListL,inti,ElemType*e)//在第i个位置上插入F元素
{
if(i1
iL.length)returnERROR;
if(L.length=L.listsize)//如果容量不够,重新申请空间
{
ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LIS)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);//储存空间申请失败
L.elem=newbase;
L.listsize+=LIS;
}
ElemType*p,*q;
q=(L.elem[i-1]);//前驱元素
for(p=(L.elem[L.length-1]);p=q;--p)
*(p+1)=*p;
*q=*e;
++L.length;
returnOK;
}
voidDestoryList(SqListL)//释放顺序表
{
free(L.elem);
L.length=0;
L.listsize=0;
}
intmain()
{
inta,b,c,i,x;
SqListL;
ElemTypee;
cout"顺序表的基本操作如下:"endl;
cout"(1)初始化顺序表"endl;
InitList_Sq1(L);
cout"(2)依次插入四个元素"endl;
cout"输入需要插入的四个值"endl;
for(inti=0;i4;i++)
{
cina;
ListInsert(L,i+1,a);
}
cout"(3)输出顺序表:";
ListOutsert(L);
coutendl;
cout"(4)输出顺序表的长度:"(ListLength(L))endl;
cout"(5)顺序表是否为空:"((ListEmpty(L)?"空":"非空"))endl;
cout"(6)顺序表L中第i个元素是:";
cout"请输入i的值:";
cini;
GetELem(L,i,e);
coute;
coutendl;
cout"(7)元素x在顺序表的位序是:"endl;
cout"请输入想要查询的元素:";
cinx;
cout(List(L,x));
coutendl;
cout"(8)在第i个元素位置上插入元素x";
cout"请输入位置i和元素x:";
cinix;
ListInsert(L,i,x);
coutendl;
cout"(9)输出顺序表L:"endl;
ListOutsert(L);
coutendl;
cout"(10)删除顺序表L中第i个元素:";
cout"请输入i的值:";
cini;
ListDelete(L,i,x);
cout"(11)输出顺序表:"endl;
ListOutsert(L);
coutendl;
cout"(12)释放顺序表"endl;
DestoryList(L);
return0;
}
预览时标签不可点收录于话题#个上一篇下一篇