顺序表
1.定义:用一组地址连续的存储单元依次存储线性表的数据元素的表。
由上图可以看出元素地址满足以下关系:
2.类型定义
以图书数据举例,其类型定义如下:
#define MAXSIZE 100 //最大长度
typedef struct
{
char no[20]; //图书ISBN
char name[20]; //图书名字
float price; //图书价格
}Book; //图书结构类型
typedef struct
{
Book *elem; //基地址
int length; //图书个数
}SqList; //图书表结构类型
3.顺序表操作
3.1初始化
【步骤】
①为L分配一个预定义大小的数组空间,elem指向这段空间的基地址。
②将表的长度置为0。
Status InitList(SqList &L)
{
L.elem = new ElemType[MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length = 0;
return OK;
}
3.2取值
【步骤】
①判断i值合不合理。
②将第i个元素即L.elem[i-1]赋给e。
Status GetElem(SqList L,int i,ElemType &e)
{
if(i<1 || i>L.length) return ERROR;
e = L.elem[i-1];
return OK;
}
3.3查找
【步骤】
①从第一个元素开始,依次比较,若相等返回i+1,若比较到最后也没有找到则查找失败,返回0。
Status LocateElem(SqList L,ElemType e)
{
for(i=0;i<L.length;i++)
if(L.elem[i] == e) return i+1;
return 0;
}
查找平均时间复杂度O(n)
3.4插入
【步骤】
①判断插入位置是否合法。
②判断存储空间是否已满。
③从后往前从第n至i依次往移动,空出第i各位置。
④将元素插入第i个位置。
Status ListInsert(SqList &L,int i;ELemType e)
{
if((i<1) || (i>L.length+1)) return ERROR;
if(L.length == MAXSIZE) return ERROR;