当前位置: 首页 > news >正文

《重生到现代之从零开始的数据结构生活》—— 顺序表1

线性表

线性表:是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的 数据结构,常⻅的线性表有顺序表、链表、栈、队列、字符串等等

线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的, 线性 表在物理上存储时,通常以数组和链式结构的形式存储

什么叫做逻辑上是线性结构嘞,就是说他在我们想象中的样子是连续的,就像是一串字符串,我们都会觉得他是连续的,但是,他在物理上不一定连续

顺序表

顺序表是⽤⼀段物理地址连续的存储单元依次存储数据元素的线性结构,⼀般情况下采⽤数组存储。

他这个数组的储存很有意思,那为什么不直接说是数组呢?非要画蛇添足的说它顺序表吗

采用数组,就是顺序表的底层逻辑是数组,但是顺序表会在他的基础上添加一些东西

顺序表的实现

首先和顺序表不可分割的就是:结构体,指针,动态内存管理

静态顺序表

typedef int  seqlista//(因为不知道什么类型的就自己定义一个类型,改的话好改)
struct seqlist{seqlista = arr[N];//定长数组int size;//有效数据的个数
}

而由于是静态的,就会出现空间的一系列问题,比如空间的大了怎么办等等

所以我们还有动态顺序表

动态顺序表

动态顺序表和静态顺序表有点不一样

typedef int  seqlista
struct seqlist
{seqlista *a;//指针int size;//有效的数据个数int capacity;//空间容量(按照份数来)
}

动态顺序表的实现

说了这么多,让我们粗略的实现一下动态顺序表吧

头文件的函数的定义

#include<stdio.h>
#include<stdlib.h>typedef int ever;struct seqlist {ever* arr;//数组int size;//有效数组个数int cap;//容量单位
};//动态顺序表void yttandb(struct seqlist* b);//初始化void pushback(struct seqlist* b, ever x);//尾插

函数的实现

#include"seqlist.h"void yttandb (struct seqlist* a) {a->arr = NULL;a->size = a->cap = 0;
}//初始化void pushback(struct seqlist* a, ever b) {if (a->size == a->cap)//空间不够{int newcap = a->cap == 0 ? a->cap = 4 : a->cap * 2;ever* tmp = (ever*)realloc(a->arr, newcap * sizeof(ever));a->arr = tmp;a->cap = newcap;}a->arr[a->size++] = b;
}

函数的调用

#include"seqlist.h"
void SLTest()
{struct seqlist sl;yttandb(&sl);pushback(&sl, 1);pushback(&sl, 2);pushback(&sl, 3);pushback(&sl, 4);
}int main()
{SLTest();return 0;
}

今天的知识讲解完啦,如果觉得有用可以点一下赞和关注,也可以先收藏以防需要时找不到哦,当然如果作者写的哪里有问题欢迎指出,我们一起进步!!!
祝看到这里的人天天开心哦(笔芯)

http://www.lryc.cn/news/457332.html

相关文章:

  • 2本书让你轻松入门大模型!《大模型入门:技术原理与实战应用》+《自然语言处理:大模型理论与实践》
  • 【JDK17 | 1】Java 17 深入剖析:新特性与变革
  • strtok
  • 零信任身份安全的基本原则
  • 【AAOS】Android Automotive 9模拟器源码下载及编译
  • 手动降级wsl中的numpy
  • 极客兔兔Gee-Cache Day7
  • R包:APAlyzer从RNA-seq数据计算APA表达丰度
  • YOLOv11改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性
  • dayu_widgets-简介
  • 改变数组页面重新渲染的操作/那些操作不会重新渲染页面以及解决方法
  • 米哈游Android面试题汇总及参考答案
  • 搜维尔科技:【应用】Xsens动作捕捉技术为奇幻电影注入活力
  • useradd命令:添加Linux新用户
  • Python+ffmpeg实现字幕视频合并
  • 垂直分库分表、水平分库分表
  • rocksdb merge的简单记录
  • 安卓开发板_MTK联发科评估套件_安卓开发板Demo板
  • maven指定模块快速打包idea插件Quick Maven Package
  • i春秋云境靶场之CVE-2022-26965
  • 流域生态系统服务评价、水文水生态分析、碳收支、气候变化影响、制图等领域中的应用
  • 超像素提取加svm训练,鼠标点击选择标签(左键为正样本,右键为负样本)
  • Vue 中引入 ECharts 的详细步骤与示例
  • 在 EC2 AWS 中开启防火墙后将自己锁定在 SSH 之外
  • OpenGL 进阶系列02 - OpenGL绘制三角形的必要步骤
  • MySql基础34题写题记录(11-20)
  • 设计模式——单例模式(1)
  • 剧本杀小程序:提升玩家游戏体验,带动经济效益
  • Linux系统通过编辑crontab来设置定时任务---定时关机
  • Mac电脑word文档误删,4个方法快速恢复