目录
顺序表:本质就是数组,动态增长,并且要求里面存储的数据必须是从左往右连续的
顺序表的逻辑结构和物理结构是一致的
顺序表缺陷:
1.动态增容有性能消耗
2.需要头部插入数据,需要挪动数据
- typedef struct SeqList
- {
- SLDataType* array; //指向动态开辟的数组
- size_t size; //有效数据的个数
- size_t capicity;//容量的空间大小
- }SeqList;
- typedef int SLDataType;
- // 顺序表的动态存储
- typedef struct SeqList
- {
- SLDataType* array; // 指向动态开辟的数组
- size_t size ; // 有效数据个数
- size_t capicity ; // 容量空间的大小
- }SeqList;
- // 基本增删查改接口
- // 顺序表初始化
- void SeqListInit(SeqList* psl, size_t capacity);
- // 检查空间,如果满了,进行增容
- void CheckCapacity(SeqList* psl);
- // 顺序表尾插
- void SeqListPushBack(SeqList* psl, SLDataType x);
- // 顺序表尾删
- void SeqListPopBack(SeqList* psl);
- // 顺序表头插
- void SeqListPushFront(SeqList* psl, SLDataType x);
- // 顺序表头删
- void SeqListPopFront(SeqList* psl);
- // 顺序表查找
- int SeqListFind(SeqList* psl, SLDataType x);
- // 顺序表在pos位置插入x
- void SeqListInsert(SeqList* psl, size_t pos, SLDataType x);
- // 顺序表删除pos位置的值
- void SeqListErase(SeqList* psl, size_t pos);
- // 顺序表销毁
- void SeqListDestory(SeqList* psl);
- // 顺序表打印
- void SeqListPrint(SeqList* psl);
1.来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-element
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素
- int removeElement(int* nums, int numsSize, int val){
- int left = 0;
- int right = numsSize;
- while(left < right)
- {
- if(nums[left] == val)
- {
- nums[left] = nums[right-1];
- right--;
- }
- else
- {
- left++;
- }
- }
- return left;