数据结构实验报告1.docx

上传人:b****2 文档编号:1671016 上传时间:2022-10-23 格式:DOCX 页数:9 大小:60.06KB
下载 相关 举报
数据结构实验报告1.docx_第1页
第1页 / 共9页
数据结构实验报告1.docx_第2页
第2页 / 共9页
数据结构实验报告1.docx_第3页
第3页 / 共9页
数据结构实验报告1.docx_第4页
第4页 / 共9页
数据结构实验报告1.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数据结构实验报告1.docx

《数据结构实验报告1.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告1.docx(9页珍藏版)》请在冰豆网上搜索。

数据结构实验报告1.docx

数据结构实验报告1

长春理工大学

 

数据结构与算法

实验报告

 

实验题目:

线性表顺序存储试验

实验时间:

实验地点:

班级:

学号:

姓名:

 

一、实验目的及要求

1、掌握用VisualC++6.0上机调试顺序表的基本方法

2、掌握顺序表的基本操作,插入、删除、查找等算法的实现

[基本要求]要求生成顺序表时,可以键盘上读取元素,用顺序存储结构实现存储。

二、实验意义及原理

当我们要在顺序表的第i个位置上插入一个元素时,必须先将顺序表中第i个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置。

三、算法分析

(1)以下为函数运行结果状态代码

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

(2)线性表的动态分配顺序存储结构

#defineLIST_INIT_SIZE100 //线性表存储空间的初始分配量

#defineLISTINCREMENT10//线性表存储空间分配增量

typedefintStatus;//函数类型,其值为为函数结果状态代码

typedefintElemType;//假设数据元素为整型

typedefstruct

{

   ElemType*elem;//存储空间基址

   intlength;//当前长度

   intlistsize;//当前分配的存储容量

}Sqlist;

(2)构造函数

//函数名:

InitList()

//参数:

SqListL

//初始条件:

//功能:

构造一个空线性表

StatusInitList(SqlistL)

{

   L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

   if(L.elem==NULL)

       exit(OVERFLOW);

   else

   {

       L.length=0;

       L.listsize=LISTINCREMENT;

       returnOK;

   }

}

(3)插入函数

//函数名:

ListInsert()

//参数:

SqListL,inti,ElemTypee

//初始条件:

线性表L已存在,1<=i<=ListLength(L)+1

//功能:

在线性表中第i个数据元素之前插入数据元素e

StatusListInsert(SqlistL,inti,ElemTypee)

{

   int*q=&(L.elem[i-1]);

   ElemType*newbase,*p;

   if(i<1||i>(L.length+1))

       returnERROR;

   if(L.length>=L.listsize)

   {

       newbase=(ElemType*)realloc(L.elem,L.listsize+LISTINCREMENT*sizeof(ElemType));

       if(newbase==NULL)

           exit(OVERFLOW);

       L.elem=newbase;

       L.listsize+=LISTINCREMENT;

   }

   for(p=&(L.elem[L.length-1]);p>=q;--p)

       *(p+1)=*p;

   *q=e;

   ++L.length;

   returnOK;

}

(4)删除函数

//函数名:

ListDelete()

//参数:

SqListL,inti,Elemtypee

//初始条件:

线性表L已存在,1<=i<=ListLength(L)

//功能:

将线性表L中第i个数据元素删除

StatusListDelet(SqlistL,inti,ElemTypee)

{

   if(i<1||(i>L.length))

       returnERROR;

   ElemType*p,*q;

   p=&(L.elem[i-1]);

   e=*p;

   q=L.elem+L.length-1;

   for(++p;p<=q;++p)

       *(p-1)=*p;

   --L.length;

   returnOK;

}

四、源代码

#include

usingnamespacestd;

#defineMAXSIZE20

typedefintElemType;

typedefstruct{

ElemTypedata[MAXSIZE];

intlength;

intlistsize;

}SqList;

//构造空线性表List

boolInitList(SqList&L){

for(inti=0;i

L.data[i]=0;}

L.length=0;

L.listsize=MAXSIZE;

returntrue;

}

//判断线性表是否为空

boolListEmpty(SqListL){

if(L.length==0){returntrue;}

else

returnfalse;}

//用ptr返回sql4第pos个元素的值

ElemTypeGetElem(SqList&L,intpos,ElemType&ptr){

if(L.length<=0||pos<1||pos>L.length){

returnfalse;

}

else{

ptr=L.data[pos-1];

returnptr;

}

}

//查询第location位置上的元素

voidlocate(SqListL,intlocation)

{

if(L.length>=location)

cout<<"查询的元素为:

"<

else

cout<<"该位置没有元素!

"<

}

/*在Sq中第pos2个位置插入新的数据元素Elem,L的长度加1*/

boolListInsert(SqList&L,intpos2,ElemTypeElem)

{

//线性表空间不足,无法插入

if(L.length==MAXSIZE){

cout<<"空间不足,无法插入!

"<

returnfalse;

}

if(pos2<1||pos2>L.length+1){

cout<<"插入位置错误!

"<

returnfalse;

}

if(pos2<=L.length)

{

/*将要插入位置之后的数据元素向后移动一位*/

for(inti=L.length-1;i>=pos2-1;i--)

{

L.data[i+1]=L.data[i];

}

}

L.data[pos2-1]=Elem;/*将新元素插入*/

if(L.data[pos2-1]==Elem){

//cout<<"添加元素成功"<

L.length++;

returntrue;

}

else{

cout<<"添加元素失败***"<

returnfalse;

}

}

//删除ps的第pos个数据元素,并用pe返回其值,ps的长度减1

boolListDelete(SqList&L,intpos,ElemType*pe)

{

if(pos<1||pos>L.length){

cout<<"删除位置错误!

"<

returnfalse;

}else{

*pe=L.data[pos-1];

/*将删除位置后继元素前移*/

for(inti=pos;i

L.data[i-1]=L.data[i];

L.length--;

returntrue;

}

}

intListLength(SqListSq)

{

returnSq.length;

}

//主函数

intmain(){

SqListlist;

cout<<"构造线性表List"<

InitList(list);//构造线性表

if(ListEmpty(list))//判断是否为空

{

cout<<"线性表为空"<

}

else

cout<<"线性表不为空";

intnum;//要添加的元素的个数

cout<<"输入值的个数:

";

cin>>num;

cout<<"输入添加元素:

";

ElemTypeElem;

for(inti=1;i

{

cin>>Elem;

ListInsert(list,i,Elem);

}

if(list.length<=list.listsize)

cout<<"添加元素成功!

"<

if(!

ListEmpty(list))//展示表内容

{

cout<<"list:

"<

for(inti=0;i

cout<

}

cout<

cout<<"请输入要查询元素的位置:

";

intele;

intpre;

cin>>ele;

locate(list,ele);

intresult;

cout<<"输入要删除元素的位置:

";

cin>>pre;

boolre=ListDelete(list,pre,&result);

cout<<"delete:

"<

if(re){

cout<<"删除成功!

"<

}else{

cout<<"删除失败!

"<

}

if(!

ListEmpty(list))

{

cout<<"list:

"<

for(inti=0;i

cout<

}

cout<

\n请输入插入位置

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1