目录
一、定义
(动态分配存储空间法)
#define InitSize 30
#define ElemType int
typedef struct {
ElemType *data;
int length; ///当前长度
int listsize; //当前分配的存储容量
}SqList;
二、初始化
函数——InitList
void InitList(SqList &list)
{
list.data = new ElemType[InitSize];
if (!list.data) exit(-1);
list.length = 0;
list.listsize = InitSize;
}
注:
- C语言的初始动态分配语句为:L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);
- C++的初始动态分配语句为:L.data=new ElemType[InitSize];
三、插入操作
bool ListInsert(SqList& L, int i,ElemType e)
{
if (i < 1 || i > L.length + 1) //判断i的范围是否有效
return false;
if (L.length >= L.listsize) //当前存储空间已满,不能插入
return false;
for (int j = L.length; j >= i; j--) //依次后移
L.data[j] = L.data[j - 1];
L.data[i - 1] = e; //在位置i处放入e
L.length++;
return true;
}
注:
- 插入——在顺序表第 i ( 1 <= i <= L.length+1 ) 个位置插入e
- 注意区别顺序表的位序和数组下标
四、删除操作
bool ListDelete(SqList& L, int i,ElemType& e)
{
if (i < 1 || i > L.length) //判断i的范围是否有效
return false;
e = L.data[i - 1];
for (int j = i; j < L.length; j++) //依次前移
L.data[j - 1] = L.data[j];
L.length--;
return true;
}
五、按值查找
int LocateElem(SqList L,ElemType e)
{
int i;
for (int i = 0; i < L.length; i++)
if (L.data[i] == e)
return i + 1; //数组下标为 i ,顺序表位序为 i+1
return 0; //退出循环,说明查找失败
}