实验一++顺序表的建立和基本运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一顺序表的建立和基本运算

一、实验目的

1、掌握顺序表存储结构的定义及C/C++语言实现

2、掌握顺序表的各种基本操作及C/C++语言实现

3、设计并实现有序表的遍历、插入、删除等常规算法

二、实验环境

PC微机,Windows,DOS,Turbo C或Visual C++

三、实验内容

1、顺序表的建立和基本运算

(1)问题描述

顺序表经常进行的运算包括:创建顺序表、销毁顺序表、求顺序表的长度、在顺序表中查找某个数据元素、在某个位置插入一个新数据元素、在顺序表中删除某个数据元素等操作。试编程实现顺序表的这些基本运算。

(2)基本要求

实现顺序表的每个运算要求用一个函数实现。

(3)算法描述

参见教材算法2.3、算法2.4、算法2.5等顺序表的常规算法。

(4)算法实现——示例程序

#include // malloc()等

#include // NULL, printf()等

#include // exit()

// 函数结果状态代码

#define OVERFLOW -2

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等

typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE

//-------- 线性表的动态分配顺序存储结构-----------

#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量

#define LIST_INCREMENT 2 // 线性表存储空间的分配增量

typedef int ElemType;

struct SqList

{

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

int length; // 当前长度

int listsize; // 当前分配的存储容量(以sizeof(int)为单位)

};

void InitList(SqList &L) // 算法2.3

{ // 操作结果:构造一个空的顺序线性表L

L.elem=new ElemType[LIST_INIT_SIZE];

if(!L.elem)

exit(OVERFLOW); // 存储分配失败

L.length=0; // 空表长度为0

L.listsize=LIST_INIT_SIZE; // 初始存储容量

}

void DestroyList(SqList &L)

{ // 初始条件:顺序线性表L已存在。操作结果:销毁顺序线性表L

delete []L.elem;

L.elem=NULL;

L.length=0;

L.listsize=0;

}

void ClearList(SqList &L)

{ // 初始条件:顺序线性表L已存在。操作结果:将L重置为空表

L.length=0;

}

Status ListEmpty(SqList L)

{ // 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE

if(L.length==0)

return TRUE;

else

return FALSE;

}

int ListLength(SqList L)

{ // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数

return L.length;

}

Status GetElem(SqList L,int i,ElemType &e)

{ // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)。操作结果:用e返回L中第i个数据元素的值

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

return ERROR;

e=*(L.elem+i-1);

return OK;

}

//int LocateElem(SqList L,int e,Status(*compare)(int,int))

int LocateElem(SqList L,ElemType e, Status(*compare)(ElemType,ElemType))

{//初始条件:顺序线性表L已存在,compare( )是数据元素判定函数(满足为1,否则为0) // 操作结果:返回L中第1个与e满足关系compare( )的数据元素的位序。

// 若这样的数据元素不存在,则返回值为0。算法2.6

ElemType *p;

int i=1; // i的初值为第1个元素的位序

p=L.elem; // p的初值为第1个元素的存储位置

while(i<=L.length&&!compare(*p++,e))

++i;

if(i<=L.length)

return i;

else

return 0;

}

Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)

{ // 初始条件:顺序线性表L已存在

// 操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,// 否则操作失败,pre_e无定义

int i=2;

ElemType *p=L.elem+1;

while(i<=L.length&&*p!=cur_e){

p++;

i++;

}

if(i>L.length)

return INFEASIBLE; // 操作失败

else{

pre_e=*--p;

return OK;

}

}

Status NextElem(SqList L,ElemType cur_e,ElemType &next_e)

{ // 初始条件:顺序线性表L已存在

// 操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,// 否则操作失败,next_e无定义

int i=1;

ElemType *p=L.elem;

相关文档
最新文档