**
顺序表
**
-
顺序表的概念
顺序表的特点:在逻辑上是连续的,在物理存储空间上也是连续的。–数组
顺序表中存储的数据元素必须从空间的首位置开始存储,而且必须连续存放,中间不能有空的空间。 -
顺序表的实现声明
// 结构的声明
typedef int DataType;
typedef struct SqList
{
DataType* data; //指向存储空间的指针
int length; //已经存储的元素的个数
int size; //当前空间的大小,单位是元素个数
}SqList;
//操作方法的声明
bool InitSqList(SqList *sq,int init_size=10);
bool DestroySqList(SqList *sq);
//插入一个元素:按照给定位置插入 插入到最前面(头插法) 插入到最后面(尾插法)
bool InsertOfPos(SqList *sq,DataType value,int pos);
bool InsertOfFront(SqList *sq,DataType value);
bool InsertOfRear(SqList *sq,DataType);
int LengthSqList(SqList *sq);
3.方法的实现
/*
内部方法
*/
//static 如果修饰我们函数,则这个函数就只能在本文件中被调用,其他文件看不到此函数
static bool IsFull(SqList *sq)
{
return sq->length == sq->size;
}
static bool AppendSpace(SqList *sq)
{
//1、申请新的空间
//2、将原始空间的数据全部导入到新空间中
//3、释放原空间,sq->data 指向新的空间,sq->size同步修改
}
/*
给sq中的三个成员变量设置初始值
*/
bool InitSqList(SqList *sq,int init_size)
{
//完成安全检测
if(sq == NULL || init_size <= 0) return false;
sq->data = (DataType*)malloc(init_size *sizeof(DataType));
if(sq->data == NULL) return false;
sq->length = 0;
sq->size = init_size;
return true;
}
//将sq中的三个成员设置假值
bool DestroySqList(SqList *sq)
{
if(sq == NULL) return false;
free(sq->data);
sq->data = NULL;//防止出现野指针
sq
sq->length = sq->size = 0;
return true;
}
bool InsertOfPos(SqList *sq,DataType value,int pos)
{
//sq pos 空间是否足够
if(sq == NULL) return false;
if(pos < 0 || pos > sq->length) return false;
if(IsFull(sq) && !AppendSpace(sq)) return false;
//在pos位置插入value值:1、将pos位置及后面的元素统一向后挪动一个位置 2、在pos位置插入value 3、length同步+1
}
/*头插法就是在0号位置插入*/
bool InsertOfFront(SqList *sq,DataType value)
{
return InsertOfPos(sq,value,0);
}
/*尾插法就是在当前的length位置插入*/
bool InsertOfRear(SqList *sq,DataType value)
{
if(sq == NULL) return false;
return InsertOfPos(sq,value,sq->length); //调用函数过程:1、压参 2、调用 3、返回
}
int LengthSqList(SqList *sq)
{
if(sq == NULL) return -1;
return sq->length;
}
// An highlighted block
var foo = 'bar';