版权声明:本文为博主胡乱瞎写,如有需要,随便转载,顺带给个momo哒。 https://blog.csdn.net/rangran/article/details/81448337
- 定义结构
- 创建顺序表
- 初始化顺序表
- 插入元素
- 删除元素
- 销毁顺序表
定义结构
//定义结构
typedef int SeqType;//存储单元类型
typedef struct
{
SeqType *elem;//存储空间基地址(类似数组首地址)
int length;//当前长度
int listsize;//当前分配的存储容量
}SqList;
typedef 用法:定义一种类型的别名,而不是简单的宏的替换,可以用作同时声明指针型的多个对象。
用typedef定义与平台无关的类型。
为复杂的声明定义一个新的简单的别名。(详细可参考http://blog.csdn.net/superhoy/article/details/53504472)
定义操作
创建顺序表
/*
*创建顺序表
*/
SqList(creatList_sq)()
{
SqList *List = (SqList *)malloc(sizeof(SqList));
return *List;
}
初始化顺序表
/*
*初始化顺序表
*返回1,表示初始化成功
*返回0,表示初始化失败
*/
int initList_sq(SqList &L)
{
L.elem = (SeqType *)malloc(sizeof(SeqType)*LIST_INIT_SIZE);
if(!L.elem)
return 0;//内存分配失败,储存空间不够
L.length = 0;//表示顺序表为空
L.listsize = LIST_INIT_SIZE;//表示顺序表里,最大存储单元个数
return 1;
}
插入元素
/*
*插入顺序表
*下标是负数就插入到结尾
*/
int insert_sq(SqList &L,inr index,SeqType val)
{
if(index>L.length)
{
//存储的下表超出顺序表的实际长度
printf("存储的下表超出顺序表的实际长度");
return 0;
}
if(index<0)//下标是负数,插入到结尾
{
index=L.length;
}
if(L.length==L.listsize)
{
//顺序表的存储单元已经存满,将继续分配新的存储单元
SeqType* newBase = (SeqType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(SeqType));//继续分配存储单元
if(!newBase){
//分配内存单元失败
return 0;
}
L.elem=newBase;
L.listsize +=LISTINCREMENT;
}
//寻找合适的插入位置,index后面的元素向后移动
for(int i=L.length;i>index;i--){
L.elem[i]=L.elem[i-1];//向后移动
}
L.elem[index]=val;//插入元素
L.length++;
return 1;
}
//realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。