【顺序表】大数据,请把它推给还不会顺序表的人(上)

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 【顺序表】大数据,请把它推给还不会顺序表的人

前言: 刷题和面试兼顾还得看你啊-牛客网


近几年互联网受疫情影响,许多互联网都使用牛客网在线笔试招人


很多同学因为不熟悉牛客网的环境和使用,最后在线笔试面试中屡屡受挫


牛客网提供了语言巩固,算法提高等在线OJ题,更有面试真题,大厂内推!


链接附上点击链接注册牛客网


牛客网这么好用,但是下面几个关于牛客网的知识你了解过吗?


你知道你OJ过不了,牛客网几种经典的英文报错提示的含义吗?

你知道牛客网的OJ分为IO型和接口型吗?

你使用过牛客网的调试功能吗?


一.基本介绍


线性表 (linklist list) 是 数据结构 的一种,一个线性表是n个具有相同特性的数据元素的有限序列


顾名思义:线性表就像一条线,不会分叉(学到树和图你自然就明白了)


线性表分为:顺序表,链表,栈和队列


线性表的两种存储方式:顺序储存和链式存储


1-2顺序表(sequence list-----通常缩写为SeqList)


顺序表分类:静态顺序表和动态顺序表


(1)静态顺序表缺点:初始时开辟定长数组,在进行插入操作时容易超出预分配的空间长度,造成溢出等


(2)动态顺序表优点:初始时动态分配内存,在进行插入操作时可灵活扩充存储空间等,推荐使用


0.动态顺序表的动态分配结构体的定义:

typedef  int SeqDateType; 
typedef struct SeqList
{
  SeqDataType* a;
  int size;      // 有效数据的个数
  int capacity;  // 容量
}SeqList;

6fdee95fd3c14f249c7ca6fc987e59d3.png


68c0c50d34944f90aa3cac1b1a90529c.png



二、基本操作


1.顺序表的初始化

你要打开冰箱拿雪糕的前提就是你得先拥有一个冰箱(顺序表),所以操作顺序表前我们得先创建一个顺序表啊

void SeqListInit(SeqList* pq)
{
  assert(pq);//等价于assert(pq != NULL)
  pq->a = NULL;
  pq->size = pq->capacity = 0;
}

f97910f99abe4bd8b2b48d8d183b54a0.png

2.顺序表的销毁

顺序表的数组是动态开辟的,占用的是堆上的空间,需要程序员手动去释放,防止长时间占用内存,这既符合谁开辟谁释放的原则,更是一个毋庸置疑的好习惯!

void SeqListDestory(SeqList* pq)
{
  assert(pq);
  free(pq->a);
  pq->a = NULL;
  pq->capacity = pq->size = 0;
}

备注:销毁同样改变了主函数内实参那个顺序表,所以依旧是传址调用

b93880cc4ba74e2d867a1c0b0323aeae.png

3.顺序表的打印

打印就是将顺序表展示在输出窗口的,但是这一步和打印数组一毛一样!

void SeqListPrint(SeqList* pq)
{
  assert(pq);
  for (int i = 0; i < pq->size; ++i)
  {
    printf("%d ", pq->a[i]);
  }
  printf("\n");
}

4.顺序表插入时检查是否需要扩容

顺序表插入时检查是否需要扩容在每次插入操作时都会用到,所以建议封装成函数,模块化代码,需要时直接调用

void SeqCheckCapacity(SeqList* pq)
{
  if (pq->size == pq->capacity)
  {
    int newcapacity = pq->capacity == 0 ? 4 : pq->capacity * 2;
    SeqDataType* newA = realloc(pq->a, sizeof(SeqDataType)*newcapacity);
    if (newA == NULL)
    {
      printf("realloc fail\n");
      exit(-1);
    }
    pq->a = newA;
    pq->capacity = newcapacity;
  }
}

0bfc2d24f2464ca99ae0ab2e2757faad.png


相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
9月前
|
存储 算法 C语言
实现顺序表——实践报告
实现顺序表——实践报告
73 0
|
2月前
|
C语言
顺序表的实现(迈入数据结构的大门)(2)
顺序表的实现(迈入数据结构的大门)(2)
20 0
|
2月前
顺序表的实现(迈入数据结构的大门)(1)
顺序表的实现(迈入数据结构的大门)(1)
13 0
|
2月前
|
存储 算法 C语言
[数据启示录 01] 线性表及其实现
[数据启示录 01] 线性表及其实现
31 0
|
2月前
|
存储 算法 Java
【数据结构与算法】4.自主实现单链表的增删查改
【数据结构与算法】4.自主实现单链表的增删查改
|
8月前
|
存储 搜索推荐
【数据结构】第二站:顺序表
【数据结构】第二站:顺序表
31 0
|
10月前
|
索引
链表问题汇集
链表问题汇集
55 1
|
10月前
栈和队列问题汇集
栈和队列问题汇集
40 0
|
存储 C语言
【数据结构】线性表之单链表(讲解实现——带动图理解)(2)
单链表 单链表的优点 1.头部和中间插入或删除数据效率高,无需挪动。 2.按照需求申请释放空间,无需担心空间不够用。 单链表的缺点 1.不可以进行下标随机访问。 2.复杂度是O(n) 3.反向遍历困难 单链表是线性表的一种,单链表是链式存储的线性表,不同于单链表,链表在内存空间中不连续,而是由结构体内的next指针下一条数据进行链接🧐
【数据结构】线性表之单链表(讲解实现——带动图理解)(1)
单链表 单链表的优点 1.头部和中间插入或删除数据效率高,无需挪动。 2.按照需求申请释放空间,无需担心空间不够用。 单链表的缺点 1.不可以进行下标随机访问。 2.复杂度是O(n) 3.反向遍历困难 单链表是线性表的一种,单链表是链式存储的线性表,不同于单链表,链表在内存空间中不连续,而是由结构体内的next指针下一条数据进行链接🧐