数据结构实验报告 线性表的基本操作.docx
- 文档编号:17137392
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:23
- 大小:329.54KB
数据结构实验报告 线性表的基本操作.docx
《数据结构实验报告 线性表的基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告 线性表的基本操作.docx(23页珍藏版)》请在冰点文库上搜索。
数据结构实验报告线性表的基本操作
《数据结构》
实
验
报
告
前言
计算机编程中加工处理的对象是数据,而数据具有一定的组织结构,所以学习计算机编程仅仅了解计算机语言是不够的,还必须掌握数据的组织、存储和运算的一般方法,这便是数据结构课程中所研究的内容,也是我们编写计算机程序的重要基础,由于它对计算机学科起到承前启后的作用,因此本课程被列为计算机等相关专业最重要的专业基础课;同时数据结构是计算机专业教学的一门核心课程。
计算机各领域都要用到各种数据结构,而且要从事计算机科学与技术工作,尤其是计算机领域的软件开发工作,必须具备较强的数据结构基础。
数据结构课程内容丰富、学习量大,实践性强;隐含在各部分内容中的方法和技术多;算法设计具有动态性和抽象性等特点,看懂听明白与掌握会应用之间有相当大的一段距离。
所以学生必须多实践才能进一步加深对课程的理解,理解和掌握算法设计所需的方法和技术,为整个专业学习打下良好的基础。
一、实验目的
二、实验内容和要求
三、源代码
1)顺序表的代码
2)单链表的代码
四、测试结果
1)顺序表的测试结果
2)单链表的测试结果
五、心得体会
实验一线性表的基本操作及其应用
一、实验目的
1、帮助读者复习C++语言程序设计中的知识。
2、熟悉线性表的逻辑结构。
3、熟悉线性表的基本运算在两种存储结构上的实现。
4、掌握顺序表的存储结构形式及其描述和基本运算的实现。
5、熟练掌握动态链表结构及有关算法的设计
二、实验内容
题目一:
顺序表的基本操作
[问题描述]
实现顺序表的建立、求长度,取元素、修改元素、插入、删除等顺序表的基本操作。
[基本要求]
(1)依次从键盘读入数据,建立带头结点的顺序表;
(2)输出顺序表中的数据元素
(3)求顺序表的长度;
(4)根据指定条件能够取元素和修改元素;
(5)实现在指定位置插入和删除元素的功能。
(6)根据算法,将两个有序的顺序表合并成一个有序顺序表。
[测试数据]由学生任意指定。
题目二:
单链表的基本操作
[问题描述]
实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。
[基本要求]
(1)依次从键盘读入数据,建立带头结点的单链表;
(2)输出单链表中的数据元素
(3)求单链表的长度;
(4)根据指定条件能够取元素和修改元素;
(5)实现在指定位置插入和删除元素的功能。
(6)根据算法,将两个有序的单链表合并成一个有序单链表。
[测试数据]
由学生任意指定。
三、源代码
(一)顺序表的基本操作
#include
usingnamespacestd;
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineOVERFLOW-2
typedefintStatus;
typedefintElemType;
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefstruct{//结构体
ElemType*elem;
intlength;
intlistsize;
}SqList;
SqListLx;
StatusInitList_Sq(SqList&L)//分配空间
{L.elem=newElemType[LIST_INIT_SIZE];
if(!
L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
returnOK;
}
StatusListInsert(SqList&L,inti,ElemTypee)//插入新元素
{int*q,*p;ElemType*newbase;
if(i<1||i>L.length+1)returnERROR;
if(L.length>=L.listsize)
{newbase=newElemType[L.listsize+LISTINCREMENT];
if(!
newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
returnOK;
}
StatusListlength(SqListL)//长度
{int*p=L.elem;//判断线形表是否存在
while(p)
{return(L.length);}
}
StatusGetElem(SqListL,inti,ElemType&e)//取元素
{if(i<1||i>L.length)
returnERROR;
else
{e=L.elem[i-1];
returne;
}
}
voidMergeList(SqListLa,SqListLb,SqList&Lc)//合并
{ElemTypeai,bj;
InitList_Sq(Lc);
inti=1,j=1,k=0;
intLa_len,Lb_len;
La_len=Listlength(La);
Lb_len=Listlength(Lb);
while((i<=La_len)&&(j<=Lb_len))
{GetElem(La,i,ai);GetElem(Lb,j,bj);
if(ai<=bj)
{ListInsert(Lc,++k,ai);++i;}
else
{ListInsert(Lc,++k,bj);++j;}
}
while(i<=La_len)
{GetElem(La,i++,ai);
ListInsert(Lc,++k,ai);
}
while(j<=Lb_len)
{GetElem(Lb,j++,bj);
ListInsert(Lc,++k,bj);
}
}
voidshow(SqListL,inti)//显示
{intj;ElemTypek;
cout<<"顺序表显示如下:
"< for(j=0;j {k=L.elem[j]; cout< if(j==i-1&&i>0) {k=L.elem[j];cout< cout< } voidcreate(SqList&L,intn)//输入元素 {inte; for(inti=0;i {cin>>e; L.elem[i]=e; L.length=i+1;} } StatusListDelete_Sq(SqList&L,inti,ElemType&e)//删除 {ElemType*p,*q; if(i<1||i>L.length)returnERROR; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p)*(p-1)=*p; --L.length; returnOK; } StatusListxiugei(SqList&L,inti,ElemType&e)//修改 {if(i<1||i>L.length) returnERROR; else {L.elem[i-1]=e; returnOK;} } voidshuru(SqList&L1)//顺序表的创建 {inta; InitList_Sq(L1); cout<<"请输入顺序表的长度: "; cin>>a; cout<<"请输入顺序表的元素(共"< create(L1,a); show(L1,a); } voidchaxun(SqList&L1)//取第i个位置的元素 {intj;ElemTypee1; cout<<"请选择所要取出元素的位置: "; cin>>j; while(j<0||j>Listlength(L1)) {cout<<"输入有误,请重新输入"< cout<<"请选择所要取出元素的位置: "; cin>>j;} GetElem(L1,j,e1); cout<<"取出的元素为: "< voidxiugai(SqList&L1)//修改第i个位置的元素 {inta; intj;ElemTypee1; a=L1.length; cout<<"请选择所要修改元素的位置: "; cin>>j; while(j<0||j>Listlength(L1)) {cout<<"输入有误,请重新输入"< cout<<"请选择所要修改元素的位置: "; cin>>j;} cout<<"要修改成的元素: "; cin>>e1; Listxiugei(L1,j,e1); cout<<"修改后的顺序表数据: "< show(L1,a); } voidshanchu(SqList&L1)//删除顺序表里的元素 {inta; intj;ElemTypee1; a=L1.length; cout<<"请选择所要删除元素的位置: "; cin>>j; while(j<0||j>Listlength(L1)) {cout<<"输入有误,请重新输入"< cout<<"请选择所要删除元素的位置: "; cin>>j;} ListDelete_Sq(L1,j,e1); cout<<"修改后的顺序表数据: "< show(L1,a-1); } voidcharu(SqList&L1)//插入元素到顺序表里 {inta;intj;ElemTypee1; a=L1.length; cout<<"请选择所要插入元素的位置: "; cin>>j; while(j<0||j>Listlength(L1)) {cout<<"输入有误,请重新输入"< cout<<"请选择所要插入元素的位置: "; cin>>j;} cout<<"要插入的元素: "; cin>>e1; ListInsert(L1,j,e1); cout<<"修改后的顺序表数据:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验报告 线性表的基本操作 数据结构 实验 报告 线性 基本 操作