顺序存储结构
定义:
顺序表就是把线性表中的所有元素按照某种逻辑顺序,依次存储到从指定位置开始的一块连续的存储空间。
初始化
struct SqList{
int data[MaxSize]; // 存放顺序表的元素
int length; // 存放顺序表的长度
int last;
};
void Init(SqList *L){
L->data[0] = int(malloc(MaxSize * sizeof(int)));
int n, i = 0;
cin >> n;
L->length = n;
while (i < n)
{
cin >>(L->data[i++]);
}
L->last = i - 1;
}
插入
bool InsertList(SqList &L, int i, int e)
{
// 在顺序表中第i个位置(位序,不是下标)插入数值e
int j;
if (i<1 || i>L.length+1) // 是否越界
return false;
if (L.length == MaxSize)// 内存已满
return false;
L.length++; // 长度++
for (j = L.length; j >= i; j--) // 将第i个起的数据后移
L.data[j] = L.data[j - 1];
L.data[j] = e;
return true;
}
删除
bool DeleteList(SqList&L, int i)
{
// 删除顺序表中第i个元素
int j;
if (i<1 || i>L.length)
return false; // 判断越界
for (j = i; j < L.length; j++)
L.data[j - 1] = L.data[j];
L.length--;
return true;
}
查找
bool LocateElem(SqList L, int e)
{
int i;
for(i = 0; i < L.length; i++){
if(L.data[i] == e){
return i+1;
}
}
链式存储结构
又称为链表,用于存储逻辑关系为 “一对一” 的数据。
用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的),包括数据域和指针域,数据域存数据,指针域指示其后继的信息。
初始化
单链表的初始化是指构建一个空表。先创建一个空结点,不存放数据,然后令其指针域为空;
bool InitList_L(LinkList &L){
L = new Lnode;
if(!L) return false;
L -> next = NULL;
return true;
}
插入结点
p = GetElem(L, i-1);
s -> next = p -> next;
p -> next = s;
删除结点
p = GetElem(L, i-1);
q = p -> next;
p -> next = q -> next;