目录
........
一、线性表的顺序表现
1、为什么称为顺序表
线性表的顺序表现:指用一组地址连续的存储单元依次存储线性表的数据元素
(同时这是线性表的顺序存储结构或顺序映像)。
通常称这种存储结构的线性表为顺序表。
注意!线性表的顺序存储结构是一种随机存取的存储结构
(表中的任一数据元素都可以随机存取)
2、顺序描述
在c++中可以用动态分配的一维数组表示线性表。
//--------顺序表的存储结构-------
typedef struct SqList{
Elemtype * elem; //存放的地址
int size; //存放的元素长度
int capacity; //容量,顺序表可能达到的长度。
}
Elemtype(模板),该数据类型是为了描述统一自定的,在实际使用中可以根据需要具体定义数据类型,如int、float、char等,以及struct结构体类型。
二、顺序表基本操作的实现
1、初始化
SqList * InitList(){
L
SqList * L.elem = new ElemType[L.capacity];
if(!=L.elem) exit(-1);
L.size = 0;
L.capacity = 100;
return L;
}
//动态分配线性表的存储区域可以更有效的利用系统的资源,当不需要该线性表时,可以销毁操作及时释放占用的存储空间。
2、取值
SqList * GetElem(SqList* L, ElemType value){
if(L==NULL){
return ;
}
//判断空间是否足够
if( L.size == L.capacity ){
//第一步,申请一块更大的空间,新空间是旧空间的两倍
L.capacity = 2*L.capacity;
ElemType * newSpace = new ElemType[L.capacity];
//第二步,拷贝数据到新的空间
memcpy(newSpace,L.elem,L.capacity*sizeof(ElemType)) /*从旧空间L.elem拷贝L.capacity*sizeof(ElemType) 个数据给新内存空间newSpace*/
free(L.elem);
//更新容量
L.elem = newSpace;
}
//插入新元素
L.elem[L.size] = value;
L.size++;
}
3、根据位置删除
void ListDelete(SqList * L,int pos){
if(L==NULL){return ;} //判断是否为空
if(pos<0||pos>L.size){return 0;} //判断是否合法
//使用for循环覆盖
for(int i=pos;i<L.size;i++){
L.elem[i-1]=L.elem[i];
--L.size;
}
}
除了根据位置删除外,还有根据值去删除,大体上是类似的,可以自己动手写一下。
4、查找
int LocateElem(SqList * L,ElemType value){
if(L==NULL){return ;} //判断是否为空
//查找到值的位置
int pos = -1;
for(int i=0;i<L.size;i++){
if(L.elem[i]==value){
pos=i;
break;
}
else return -1; //查找失败
}
return pos;
}