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

顺序表以及链表的应用及区别(包含OJ讲解)

前面我已经发过怎么实现链表以及顺序表,今天大概的总结一下。

顺序表:

1.能够随时的存取,比较方便。

2.插入删除时,需要挪动数据,比较麻烦,因为是连续存储。

3.存储密度相对于链表来说是比较高的(存储单个字符的时候)。

4.如果首次开辟的空间不够用,后续还要继续扩容空间。比较麻烦。

链表:

1.存储密度相比于顺序表比较低(存储单个字符时)。

2.插入删除数据时,不需要挪动数据,这个方便。

3.插入数据时,如果是尾插,则要遍历整个链表,比较麻烦。也就是不支持随机访问。

4.不存在空间不够的情况,只要插入数据就申请空间,不存在浪费空间。

综上所述:

如果题目要求的是频繁的插入数据或是删除数据,我们应该要选择链表,而如果题目要的是频繁的查找数据,我们则要的是顺序表。根据他们的优缺点来进行取舍。

应用:

它们应用的地方在数据结构中很广泛,比如后面的串,队列,栈等等都会运用到。所以,个人认为这个是学数据结构的基础。

栈:其实栈以用链表表示,也可以用顺序表表示,但是我们知道栈的使用规则是先使用高地址,后使用低地址,而且还是先进后出的(也是后进先出,表示方法:LIFO或FILO)。也就是说,可栈顶的元素是先出的,所以这样就行了我们所说的压栈,所以,再用链表表示时,我们只能用头插法和头删法,这样的是不用遍历链表的,时间复杂度是O(1).此种情况是不带头节点不循环的单链表。所以,我们选择顺序表来表示栈更好一点。直接用尾插,既不用遍历数组,也不用挪动数据,使用起来更加方便。

队列:队列是先进先出的,也就是FIFO。他其实也可以用这两种方法分别表示,如果用链表来表示的话,适合用尾插法,头删法,这样就可以保证FIFO。插入和删除的时间复杂度都是O(1)。复合队列的规则。如果用顺序表的话,不考虑循环队列,删除数据时,要把挪动数据,相对于链表来说是比较麻烦的(也可以不用挪动数据,但是这样就必须要挪动队列的头)。所以个人认为不是循环队列的话,还是用链表比较好。

串:

串的话个人认为两个表示方法没有什么区别,因为保存的是字符,所以用链表表示的话存储密度低,如果用顺序表的话,七朵多种用顺序表表示的方法,具体还是得看自己选哪一个,具体的哪几种方法就不想细说了,感兴趣的可以私聊我,共同探讨一下。

所以,综上所述:在链表和顺序表中如何选择,就看那个比较好,方便满足条件。

上面总结了顺序表和链表的应用,下面说说栈的应用:不用说其实大家首先想到应该就是递归了,因为递归很容易导致栈溢出,所以,首当其冲的就是递归了。其次就是上次我说的那个前/后缀表达式计算,下来就是中缀表达式如何转后/前缀表达式,都是可以运用栈思想的。还有就是括号的匹配,让我们看看下面的题:

就是匹配,核心思想就是创建栈,遇见左括号就压入栈中,直到遇见右括号就停止,然后是取出栈中的元素,跟这个右括号匹配,匹配成功就继续,不成功就输出false。下面是实现的代码:

 

总体实现的代码在上,有更好的方法希望大家评论区指出,这道题我用顺序表实现的栈,如果用链表也可以,不过此时就要写一个申请节点空间的函数,每次压栈的时候,都要调用次函数来申请节点,所以我就用了静态的顺序表来实现,直接一次性开劈大点 (浪费了很多空间)。

最后的总结:

链表的核心思想就是插入删除查找等,方法都是一样的。顺序表就更不用说了,大部分题型都可以用数组的方法来做。

最后,如果本篇文章对你有帮助的话就点一下赞,支持一下吧!!!!!

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

相关文章:

  • JVM简介
  • Leetcode.1653 使字符串平衡的最少删除次数
  • leetcode 71~80 学习经历
  • 使用metrics-server监控k8s的资源指标
  • 【Copula】考虑风光联合出力和相关性的Copula场景生成(Matlab代码实现)
  • 【java基础】泛型程序设计基础
  • 【省选模拟测试23 T1直径】更好的做法
  • SpringCloud基础(3)-微服务远程调用
  • 10.单点登录原理及JWT实现
  • 图表控件LightningChart.NET 系列教程(十一):LightningChart 组件——添加至 Blend WPF 项目
  • libGDX:灯光效果实现一(实现一个点光源)
  • Java生态/Redis中如何使用Lua脚本
  • 网络编程 socket 编程(一)
  • 【SpringCloud】SpringCloud教程之Nacos实战(一)
  • 高通Android 12/13 默认应用程序授予权限
  • 代码随想录|day6|哈希表篇-- 242.有效的字母异位词 、349. 两个数组的交集 、202. 快乐数、1. 两数之和
  • k8s学习之路 | Day20 k8s 工作负载 Deployment(下)
  • 考研复试——操作系统
  • Java ~ Collection/Executor ~ LinkedBlockingDeque【源码】
  • 【前缀和】截断数组、K倍区间、激光炸弹
  • 函数编程:强大的 Stream API
  • 企业架构图之业务架构图
  • 监控易网络管理:网络流量分析
  • RHCSA-文件内容显示(3.6)
  • Qt多线程文件查找器
  • 源码阅读笔记 InputFormat、FileInputFormat、CombineTextInputFormat
  • 二值图像骨架线提取
  • 规划数据指标体系方法(上)——OSM 模型
  • 做程序界中的死神,继续提升灵力上限
  • [数据结构]:11-冒泡排序(顺序表指针实现形式)(C语言实现)