1.线性表
2.顺序表
2.1概念及结构
顺序表是用一段物理地址连续的存储单元数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删改查
顺序表一般分为:
1.静态顺序表:使用定长数组存放元素(相当于连续存放的数组)
2.动态顺序表:使用动态开辟的数组存储
typedef struct Seqlist
{
int* a;//指向动态开辟的数组
size_t size;//有效数据的个数,指向最后一个元素的下一个位置
size_t capicity;//容量空间的大小
}Seqlist;
让我们看一下扩容的知识点吧~
扩容分为原地扩容和异地扩容,
其区别是看扩容的地址是否分配给了别人,若没有分配给别人,则就是原地扩容,否则就是异地扩容;
其检验方法是看返回值,原地扩容返回值是原地址,而异地扩容返回的是新地址
我们来举个实践例子吧~
由上图可看到,两个地址是一样的,所以都是原地扩容
接下来,重要的操作开始了(增删改查)!!!大家要认真看哦
定义一个顺序表
typedef struct Seqlist
{
int *a;
size_t size;
size _t capicity;
}Seqlist;
初始化一个顺序表
typedef struct Seqlist
{
int* a=NULL;
int size=0;
int capicity=0;
}Seqlist;
删除一个顺序表
void SeqlistDestory(SL*psl)
{
if(psl->a!=NULL)
{
free(psl->a);
int*a=NULL;
size_t size=0;
size_t capicity=0;
}
}Seqlist;
尾插顺序表
打印顺序表
头插法
尾删法
void SeqlistPopBack (Seqlist *psl)
{
if(psl->size==0)//温柔的检查
//暴力检查:assert(psl->size>0)
return 0;
psl->size--;
}
头删法
在pos位置插入x值
在pos位置删除x值
思路:
代码实现:
找到值的元素
好啦,关于顺序表的操作我们就讲到这里啦~接下来让我们实践做几个题吧~
例题1:
首先我们在看题之前,我们要先了解什么是非递增,非严格递增,非递减,非严格递减
非递增就是递减
非严格递增:是有序的,后面的数大于或等于前面的数
思路:
代码实现:
例题二:
思路:
代码实现:
好啦~关于顺序表的知识点我们就讲到这里啦~后面会继续持更哦~