数据结构论坛

首页 » 分类 » 问答 » 数据结构实验一线性表的基本操作
TUhjnbcbe - 2021/6/3 18:20:00
实验一:线性表的基本操作

实验题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;

}

预览时标签不可点收录于话题#个上一篇下一篇
1