尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

算法入门(6)——线性数据结构

算法入门(6)——线性数据结构
📅 发布时间:2026/7/25 0:14:57

目录

  • 前言
  • 1. 数组
  • 2. 链表
  • 3. 栈
  • 4. 队列
  • 5. 对比
  • 6. 小结

前言

数据结构是一种数据组织、管理和存储的格式。它是相互之间存在一种或多种特定关系的数据元素的集合。——百度百科
我们要学习的数据结构可以帮助我们更方便地解决问题。不同的数据结构有不同的特性,有的是优点,有的是缺点。没有十全十美的数据结构,在解决问题时要根据实际需求选择不同的数据结构。本篇我们将讨论基本的几种线性数据结构,在最后我会放一个表格,展示每种数据结构对某些操作的支持复杂度。

1. 数组

数组是最常见的一种数据结构,它的特点是支持O ( 1 ) O(1)O(1)访问和修改指定下标的元素。值得注意的是,在 C++ 的 STL 里实现了一个vector类,是一个动态数组,支持动态修改元素以及增删。

2. 链表

链表分为单链表、双向链表、循环链表等。链表中的元素是离散存储的,每个元素有一个或两个(数量取决于类型)指针指向相邻元素。它支持O ( 1 ) O(1)O(1)增删元素,但是不支持随机下标访问,只能遍历。一个简单的实现:(双向链表)

structnode{// 每个节点node*nxt,*pre;// 指向前后的指针intval=0;// 元素的值};node*head,*tail;// 头和尾,初始化要创建两个空元素占位voidinit(){head=newnode();tail=newnode();head->pre=nullptr;head->nxt=tail;tail->pre=head;tail->nxt=nullptr;}voidaddafter(intv,node*p){// 在p后面加上这个新元素node*q=newnode();q->val=v;q->nxt=p->nxt;q->nxt->pre=q;q->pre=p;p->nxt=q;}voidaddhead(intv){addafter(v,head);}voidaddtail(intv){addafter(v,tail->pre);}voiddelafter(node*p){// 从p后面删除一个元素,需要保证这个元素后面有元素node*tmp=p->nxt;p->nxt=tmp->nxt;tmp->nxt->pre=p;deletetmp;}voiddelhead(){delafter(head);}voiddeltail(){delafter(tail->pre->pre);// 注意一个pre的话会把tail给删了,这样会出问题}vector<int>forloop(){// 遍历并将元素放到一个vector中vector<int>ans;node*p=head->nxt;while(p!=tail){ans.push_back(p->val);p=p->nxt;}returnans;}voiddelall(){// 清空整个链表,退出前要调用node*p=head;while(p!=tail){p=p->nxt;deletep->pre;}deletetail;}

3. 栈

栈是一种后进先出(LIFO)的数据结构,也就是说,最后进入栈的元素将会最先被弹出。栈就像煎煎饼,最后被煎好的煎饼放在最上面,也就只能先吃这个煎饼。C++STL 有stack类实现了栈,只能访问栈顶。手写栈很简单,而且支持访问栈中间的元素(不建议这么做,除非你清除知道你在做什么):

intstk[100007],tp=0;voidpush(intv){// 压入新元素stk[++tp]=v;}voidpop(){// 弹出栈顶tp--;}inttop(){// 访问栈顶returnstk[tp];}

4. 队列

队列是一种先进先出(FIFO)的数据结构,先入队的元素先被弹出,就像排队打饭,先排队的人先打到饭。STL 有queue实现队列,支持入队和出队,以及访问队头队尾。还有deque双端队列,可以从队头和队尾分别插入和弹出。手写队列:

intque[100007],head=1,tail=0;voidpush(intv){que[++tail]=v;}voidpop(){head++;}intfront(){returnque[head];}intback(){returnque[tail];}

5. 对比

类型插入删除随机位置查询随机位置修改
数组O ( N ) O(N)O(N),头尾O ( 1 ) O(1)O(1)O ( N ) O(N)O(N),头尾O ( 1 ) O(1)O(1)O ( 1 ) O(1)O(1)O ( 1 ) O(1)O(1)
链表O ( 1 ) O(1)O(1)O ( 1 ) O(1)O(1)O ( N ) O(N)O(N)O ( N ) O(N)O(N)
栈只能栈顶O ( 1 ) O(1)O(1)只能栈顶O ( 1 ) O(1)O(1)--
队列只能头尾O ( 1 ) O(1)O(1)只能头尾O ( 1 ) O(1)O(1)--

6. 小结

今天我们总结了常见的线性数据类型,希望大家好好掌握,为更难的算法学习打下坚实基础!

相关新闻

  • Windows本地实时字幕工具TMSpeech:5个简单步骤让会议语音秒变文字
  • 选购高性能VM70-25B卧式双头四工位钻植平一体机找哪家 - 热点品牌推荐
  • 机器人关节焊错0.01mm就报废?减速器精密焊接三招

最新新闻

  • 内蒙古老牌的文具小商品批发实力公司合作选型参考 - 热点品牌推荐
  • 别等度数涨了才着急:2026年昆明配眼镜推荐,找准方向比多跑几家更重要 - 配眼镜新资讯
  • 2026年选靠谱手糊混胶机源头厂家 实用选购参考指南 - 热点品牌推荐
  • 重磅发布 | 2026中国百度推广公司TOP5榜单:谁才是真正的效果之王? - 品牌前沿专家
  • 【AI游戏平衡性分析终极指南】:20年资深游戏架构师亲授3大核心算法与5个真实失败案例复盘
  • 2026年PA粉碎料源头工厂有哪些 正规供应商筛选参考 - 品牌优推

日新闻

  • 从国家条件到买方清单,深入理解 ABAP CDS 单值过滤器派生
  • 2026 年当下,齐齐哈尔专业的不锈钢闸门批发厂家哪个好,揭秘!这个工业“铁门”如何实现成本翻倍的效率提升? - 行业甄选官
  • 2026阳极氧化加工厂推荐:从设备规模看硬质氧化技术的成熟应用推荐百正机械 - 栗子测评

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号