【数据结构】顺序表(Seqlist)详解-增删查改

该文章详细介绍了如何使用C语言实现顺序表的数据结构,包括顺序表的动态初始化、释放、打印、检查容量并扩容、插入、删除、查找等功能。同时,文章提供了头插、头删、尾插、尾删以及在指定位置插入和删除数据的实现方法,并通过示例代码展示了这些操作的测试用例。
摘要由CSDN通过智能技术生成

一、顺序表

  1. 什么是顺序表:

顺序表表是用一段物理地址连续的存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改

  • 要求数据是连续存入的

  • 可动态增长的数据

  • 属于线性表的一种

  1. 顺序表的定义:

顺序表的定义分为静态、动态两种,一般采用动态开辟,原因:

  • 静态定义顺序表使用定长数组存储元素,开辟空间小了不够用,大了浪费空间。

静态顺序表:

动态顺序表:

  • 动态顺序表使用动态开辟空间存储数据元素

  • 其中size为当前顺序表中的数据元素个数

  • capacity为顺序表能够村存数据的容量

  1. 顺序表的初始化:

  • 首先断言,防止传入空指针

  1. 释放动态顺序表:

  1. 打印顺序表:

  1. 检查顺序表容量并扩容:

  • 注意判断realloc是否成功开辟空间

  1. 尾插:

  • 插入数据时需检查容量并判断是否扩容

  1. 尾删:

  • 删除数据时需判断size的大小,防止size--到小于0,导致程序越界

测试尾插尾删功能:

  1. 头插:

  1. 头删:

测试头插头删功能:

  1. 指定位置插入数据:

  • 断言pos大小,防止越界

  • 挪动数据与头插异曲同工,就是挪动pos前的数据

  1. 删除指定位置的数据:

由此我们可以推断出,当pos=0时,就是在顺序表中0的位置插入数据,即头插,以此类推,当pos = size时,就是在顺序表中size的位置插入数据,即尾插,删除的功能也是如此。

测试指定位置插入删除功能:

  1. 在顺序表中查找某个数据:

测试查找功能:

  1. 修改指定位置的数据:

测试功能:

二、顺序表程序:

  1. Test.c

  1. SeqList.c

  1. SeqList.h

三、OJ练习:

1.原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。

移除元素-leetcode

  • 采用"双指针"的方法。

2.删除排序数组中的重复项。

删除有序数组中的重复项

  • 当两个数据相等时,src指针跳过一个元素,不相等时,dst指针先++,然后dst指针位置的元素等于src位置的元素。

3.合并连个有序数组。

合并两个有序数组-leetcode

  • 一共设置三个指针,且三个指针的位置都在数组的尾部,原因是设置在头部可能会导致数据覆盖错误。

  • 此题要求将两个数组合并到第一个数组中,当第一个指针走完,第二个没走完,即是第一个数组的元素已比较完并覆盖完毕,第二个数组中仍有元素未覆盖,第二个循环即将第二个数组中的元素覆盖完。

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值