顺序表学习
Posted ybossy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序表学习相关的知识,希望对你有一定的参考价值。
顺序表学习
顺序表原理
顺序表是一种简单的线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空值,插入、插入时需要移动大量的元素。
顺序表的三个要素
1.elems记录存储位置的基地址
2.分配一段连续的存储空间size
3.用length记录实际的元素长度,即顺序表的长度,与size不一定相等,因为空间预留着,不一定存储着数据。
定义如下:
template <Typename ElemType>
struct _Sqlist{
ElemType* elems;
int length;
int size;
};
顺序表的算法实现
假定ElemType 为int类型
顺序表的初始化
bool initList(SqList& L) {
L.elems = new int[MAX_SIZE]; //为顺序表分配MAX_SIZE个int元素的空间
if (!L.elems) return false; //分配空间失败 返回false
L.length = 0;
L.size = MAX_SIZE;
return true;
}
顺序表增加元素(加在表的最后面)
bool listAppend(SqList& L, int e) {
if (L.size == L.length) {
return false; //存储空间已满,返回false
}
L.elems[L.length++] = e;
return true;
}
顺序表插入元素(加在表中)
bool listInsert(SqList& L,int index,int e){ //在已有的元素中间插入一个元素,index表示下标,即第index+1个元素
if (index < 0 || index >= L.length) {
return false; //index 的值不合法,返回false
}
if (L.length == L.size) {
return false; //存储空间满了,返回false
}
for (int j = L.length - 1;j >= index;j--) {
L.elems[j + 1] = L.elems[j];
}
L.elems[index] = e;
L.length += 1;
return true;
}
顺序表删除元素
bool listDelete(SqList& L, int index) {
if (index<0 || index>L.length - 1) {
return false; //检查index的合法性
}
for (int j = index + 1;j <= L.length - 1;j++) {
L.elems[j - 1] = L.elems[j];
}
L.length -= 1;
return true;
}
销毁整个顺序表
void listDestroy(SqList& L) {
if (L.elems) {
delete[]L.elems;//删除动态内存
}
L.size = 0;
L.length = 0;
}
就这样
以上是关于顺序表学习的主要内容,如果未能解决你的问题,请参考以下文章
数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o
数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o