数据结构实验报告——线性表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告:线性表的基本操作
实验1:实现顺序表各种基本运算的算法
一、实验目的
学会并运用顺序表存储结构及各种运算。
二、实验环境
VC++6.0
三、实验准备
(1) 复习课件中理论知识
(2)练习课堂所讲的例子
四、实验内容
编写一个程序实现SqList.cpp,实现顺序表基本运算,并在此基础上设计个主程序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、构造一个空的线形表并分配内存空间
Status InitList_Sql(SqList &L)
{L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem) exit(OVERFLOW);
L.length=0; L.listsize=LIST_INIT_SIZE; return OK; }
2、求线性表的长度
Status ListLength(SqList L) {
return L.length; }
3、线性表清空
void ClearList(SqList &L){ L.length = 0; }
4、在顺序线形表 L 中第 i 个位置之前插入新的元素 e
Status ListInsert_Sq(SqList &L,int i,ElemType e)
5、查找'm'在顺序表中的位序
e = 'm'; i = LocateElem_Sq(L,e);
printf("元素 m 在顺序表中的位序是:%d\n",i);
6、在第4个位置上插入f元素
printf("(在第 4 个元素位置上插入 f 元素\n");
ListInsert_Sq(L,4,'f');
7、删除第 3 个元素
printf("(删除顺序表 L 中第 3 个元素:"); ListDelete_Sq(L, 3, e);
printf("被删除的第 3 个元素值是:%c",e);
8、重新申请空间
ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCR
EMENT)*sizeof( ElemType)); if(!newbase) exit(OVERFLOW);
L.elem=newbase;新的存储空间基址 L.listsize+=LISTINCREMENT;
9、初始化并插入元素
InitList_Sql(L); printf("依次插入 a,b,c,d,e 元素\n");
10、输出顺序表、释放顺序表
printf("输出顺序表 L:"); ListTraverse(L); printf("(释放顺序表
L\n"); DestroyList(L);
六、实验总结
通过该实验的学习,对课堂内容再次巩固,对顺序表也有了更深的了解。
顺序表无非几种操作顺序表的构建与释放、元素插入、增加容量、删除元素、查找元素等。在此过程中,我感觉顺序表的操作比较麻烦,就分配空间来说因为他使用的是顺序空间,不确定要分配多大空间,如果不够用还要从新分配。此外在插入和删除元素时必须从表尾开始移动其他元素。
附:源代码
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
//----线形表的动态分配顺序存储结构
#define LIST_INIT_SIZE 100 //顺序表存储空间的初始分配量
#define LISTINCREMENT 10 //线形表存储空间的分配增量
typedef char ElemType;
typedef struct{
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量(以 sizeof(ElemType)为单位) }SqList;
Status InitList_Sql(SqList &L) //构造一个空的线形表
{ //分配内存空间
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem)//存储分配失败
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}//InitList_Sq
//遍历一个线性表
void ListTraverse(SqList L){
for(int i=0;i if(i==0) printf("("); printf("%c",L.elem[i]); if(i==L.length-1) printf(")\n"); else printf(","); }}//求线性表的长度 Status ListLength(SqList L) {return L.length; }//把线性表清空 void ClearList(SqList &L){ L.length = 0; }//判断线性表是否是空表 bool ListEmpty(SqList &L){ return (L.length == 0)?true:false;