数据结构实验报告——线性表

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档