编程实现 ADT List 基本操作13个(一)
ADT List如下
ADT List
{
数据对象:D = {
ai|ai∈ElemSet,i=1, 2, …, n, n≥0}
数据关系:R = {
<ai-1, a>|ai-1, ai∈D, i=2, …, n}
基本操作:
//1.初始化、销毁和清空操作
InitList( &L )
操作结果:构造一个空的线性表L
DestroyList( &L )
初始条件:线性表L已存在
操作结果:销毁线性表
ClearList( &L )
初始条件:线性表L已存在
操作结果:将线性表L重置为空表
//2.访问型操作
ListEmpty( L )
初始条件:线性表L已存在
操作结果:若线性表L为空表,则返回TRUE,否则返回FALSE
ListLength( L )
初始条件:线性表L已存在
操作结果:返回线性表L的元素个数
GetElem( L, i, &e )
初始条件:线性表L已存在,且1≤i≤ListLength(L)
操作结果:用参数e返回线性表L中第i个元素的值
LocateElem( L, e )
初始条件:线性表已存在
操作结果:返回线性表L中第一个与参数e相同的数据元素的位置。若这样的元素不存在,则返回0
PriorElem( L, cur_e, &pre_e )
初始条件:线性表L已存在
操作结果:若cur_e是线性表L中的数据元素,且不是第一个元素,则用pre_e返回其前驱元素,否则操作失败,pre_e无意义
ListTraverse( L )
初始条件:线性表L已存在
操作结果:从线性表第一个元素开始,依次访问并输出线性表的数据元素
//3.加工型操作
SetElem( &L, i, &e )
初始条件:线性表L已存在,且1≤i≤ListLength(L)
操作结果:将线性表L中第1个元素的值用参数e替换,并将旧值用参数e返回
InsertElem( &L, i, e )
初始条件:线性表L已存在,且1≤i≤ListLength(L)+1
操作结果:将线性表L中第i个元素的值用参数e替换,并将旧值用参数返回
DeleteElem( &L, i, &e )
初始条件:线性表L已存在,且1≤i≤ListLength(L)
操作结果:删除线性表L中第i个位置上的数据元素,并用参数e返回其元素值,原来第i+1个到第n个元素依次向前移动一个位置,线性表L的长度减1
} //ADT List
使用顺序结构实现
#include <iostream>
#include <stdlib.h>
using namespace std;
#define ListInitSize 128 //初次分配空间大小
#define ListIncrement 256 //空间分配增量大小
typedef struct List
{
int *pData; //动态存储空间的基地址
int length; //存储数据元素的个数
int size; //当前已分配的存储空间的大小
}List;
void InitList( List &L )
{
//初始化顺序表
L.pData = (int *)malloc(ListInitSize * sizeof(int)); //申请存储空间
if( L.pData == NULL