数据结构(长期更新)第3讲:顺序表相关操作

数据结构(长期更新)第3讲:

顺序表相关操作

++跟着潼心走,轻松拿捏C语言,困惑通通走,一去不回头~欢迎开始今天的学++ ++习内容,你的支持就是博主最大的动力++ 。博主主页:潼心1412o-CSDN博客


目录

前言

上节课我们学习了第一种数据结构线性表

线性表在逻辑结构上一定有序,物理结构上不一定有序

顺序表是线性表中逻辑结构和物理结构上都有序的一种数据存储线性结构

其底层是由数组实现的,我们学习的是动态顺序表

今天我们继续来学习对于顺序表的其他操作

3.1 线性表的尾插

3.2 头插

前面我们尾插需要考虑空间容量的情况,不够需要增容

头插也是同样需要的,相同的代码我们就可以将其封装为函数

记得头文件进行函数声明,才可在test.c文件中进行调用

除此之外还有一点需要注意

3.3 头删尾删

3.4 指定位置插入/删除

3.5 顺序表算法题

3.5.1 移除元素

https://leetcode.cn/problems/remove-element/description/

我们依旧介绍三种方法

第一种就是直接暴力查找一个for循环,遍历整个nums数组(顺序表)

找到一个指定元素就消除一个,即前面我们讲过的指定位置元素删除

单次erase时间复杂度为O(n),再加上外层for循环,时间复杂度为O(N^2)

第二种就是创造一个新数组,储存非指定元素

最后返回新数组(顺序表)的size

这种方法只需遍历一边老数组,时间复杂度为O(N),但是开辟了额外的空间,空间复杂度为O(N)

这就是空间换时间

第三种就是双指针法

伪代码如下

cpp 复制代码
int dst;

int src;

if(a[src]==val)
{
    swap(a[src],a[dst]);
    src++;
    dst;
}
else
    src++;

一个是src,在前面探路,将数组遍历一遍,找到val值并将其与dst指向的值交换

另一个dst,负责在后方计数并保存等于val的值

3.5.2 删除有序数组中的重复项

https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/

方法一:暴力模拟

直接O(n^2)for循环查找再erease

方法二:双指针

cpp 复制代码
int removeDuplicates(int* nums, int numsSize) {
    int src=1;
    int dst=0;
    while(src<numsSize)
    {
        if(nums[src]!=nums[dst])
        {
            dst++;
            nums[dst]=nums[src];
        }
        src++;
    }
    return dst+1;
}

3.5.3 合并两个有序数组

https://leetcode.cn/problems/merge-sorted-array/description/

还是三种方法

法一:暴力先合并,再排序

法二:创建一个新数组,遍历两个数组,按顺序放进新数组,再拷贝回原数组

法三:双指针

cpp 复制代码
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
    int l1=m-1;
    int l2=n-1;
    int l3=m+n-1;
    while(l1>=0&&l2>=0)
    {
        if(nums1[l1]>nums2[l2])
        {
            nums1[l3--]=nums1[l1--];
        }
        else nums1[l3--]=nums2[l2--];    
    }
    while(l2>=0)
    {
        nums1[l3--]=nums2[l2--];
    }
}

其他操作且听下回分解


++好了今天的学习内容就到这里啦,谢谢你的陪伴,我是潼心,下次再见~如果这篇文章对你有帮助的话。请务必给主播一个一键三连,球球了,这对主播很重要~++

博主主页:潼心1412o-CSDN博客

相关推荐
如君愿6 分钟前
考研复习 Day28 | 习题--计算机网络第四章(网络层 中)、数据结构(树与二叉树 下)
数据结构·计算机网络·考研·课后习题·记录考研
江南十四行26 分钟前
排序算法进阶:直接插入排序(简单排序)与希尔排序
数据结构·算法·排序算法
洛水水30 分钟前
【Redis入门】一篇详解Redis五大数据结构
数据结构·数据库·redis
CoderCodingNo33 分钟前
【CSP】CSP-J 2021真题 | 插入排序 luogu-P7910 (适合GESP四-六级及以上考生练习)
数据结构·算法·排序算法
努力努力再努力wz2 小时前
【MySQL进阶系列】一文打通事务机制:从锁、Undo Log 到 MVCC 与隔离级别
c语言·数据结构·数据库·c++·mysql·算法·github
薇茗2 小时前
【初阶数据结构】 左右逢源的分支诗律 二叉树1
c语言·数据结构·算法
澈2072 小时前
C++ string全面解析:从入门到精通
数据结构·c++·算法
Irissgwe2 小时前
算法之滑动窗口
数据结构·算法
纽扣6672 小时前
【算法进阶之路】链表核心:快慢指针与反转链表专题精讲
数据结构·c++·算法·链表
浅念-3 小时前
吃透栈:LeetCode 栈算法题全解析
数据结构·c++·算法·leetcode·职场和发展·