数据结构:顺序表

数据结构是计算机存储、组织数据的方式。使用数据结构会大大提高程序运行的效率。

1、顺序表的概念及结构

线性表是n个具有相同属性的数据元素的有限序列。常见的线性表有顺序表,单链表,栈,队列...

线性表是逻辑上是连续的,但物理结构上不一定是连续的,线性表在物理上存储时,通常以数组或链式结构的形式存储。

顺序表底层结构是数组,对数组的封装。

顺序表的分类:

  • 静态顺序表:
cpp 复制代码
typedef int SLDataType;
#define N 10
typedef struct SeqList
{
    SLDatatype a[N];
    int size;
}SL;

缺陷:空间给少了不够用,给多了浪费空间。

  • 动态顺序表:
cpp 复制代码
typedef int SLDataList;
typedef struct SeqList
{
    SLDataList*a;
    int size;//有效数据个数
    int capacity;//容量
}SL;

可以增容。

2、动态顺序表的实现

3、顺序表的应用

基于动态顺序表实现通讯录

这里要结合顺序表的文件,要把typedef int SLDataType改为typedef personInfo SLDataType,personInfo为结构体。

4、顺序表的算法

移除元素:

cpp 复制代码
int removeElement(int* nums, int numsSize, int val) {
    int j=0;
    for(int i=0;i<numsSize;i++)
    {
        if(nums[i]!=val)
        {
            nums[j]=nums[i];
            j++;
        }
    }
    return j;
}
cpp 复制代码
int removeElement(int* nums, int numsSize, int val)
{
    int* temp = (int*)malloc(sizeof(int)*numsSize);
    if(NULL == temp)
    {
        return 0;
    }
    int count = 0;
    for(int i = 0; i < numsSize; ++i)
    {
        if(nums[i] != val)
        {
            temp[count] = nums[i];
            ++count;
        }
    }
    memcpy(nums, temp, sizeof(int)*count);
    free(temp);
    return count;
}

两种算法。

合并两个有序数组:

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

5、顺序表的问题

1、中间/头部的插入删除,时间复杂度为O(N)

2、增容需要申请空间,拷贝数据,释放空间,会有不小的消耗

3、如果数据不算多,增容会浪费空间

上述问题导致顺序表可能不会受大家的青睐。

谢谢大家观看!

相关推荐
int型码农14 分钟前
数据结构第八章(二)-交换排序
c语言·数据结构·算法·排序算法
落羽的落羽4 小时前
【C++】二叉搜索树
开发语言·数据结构·c++·学习
编程绿豆侠4 小时前
力扣HOT100之二分查找: 34. 在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
Shan12054 小时前
找到每一个单词+模拟的思路和算法
数据结构·算法
纳于大麓4 小时前
数据结构-栈
数据结构
jz_ddk5 小时前
[zynq] Zynq Linux 环境下 AXI BRAM 控制器驱动方法详解(代码示例)
linux·运维·c语言·网络·嵌入式硬件
Magnum Lehar5 小时前
vulkan游戏引擎启动环境配置1
c语言
半桔6 小时前
【算法深练】分组循环:“分”出条理,化繁为简
数据结构·c++·算法·leetcode·面试·职场和发展
@Mr_LiuYang6 小时前
Mermaid 绘图--以企业权限视图为例
数据结构·mermaid·结构图·层次权限·权限关系图
字节高级特工6 小时前
【Linux篇】0基础之学习操作系统进程
linux·运维·服务器·数据结构·windows·学习·list