Learning Data Structure_2_线性表、栈和队列
一个人在学校的日子有些寂寞,但是st说男人要耐得住寂寞,做学问也是如此吧。今天看了线性表、栈和队列的内容。以下是学习记录。
线性表(list)
1.定义:0个或多个数据元素的有限序列,元素有且只有一个直接后继和一个直接前驱;基本操作ListLength、GetElem、LocateElem、ListInsert等,并集Union的实现。
2.线性表的顺序存储结构
指用一段地址连续的存储单元依次存储数据元素(c语言中用数组实现改结构);数组长度>=线性表的长度;对于任意位置的存入或取出的所需时间相同O(1):随机存储结构
顺序结构的插入与删除的算法实现(注意考虑异常的判断),整体移动,平均(n-1)/2,时间复杂度O(n);顺序结构的优点:快速存取,无需指针的开销;缺点:移动大量的元素,难以确定线性表的空间容量。
3.线性表的链式存储结构
改进顺序结构的缺点;由结点(Node)构成,每个结点分为数据域和指针域;头指针和头结点的区别。
单链表的插入(修改p和p->next指针),malloc:生成一个新的结点;结点的删除,free。单链表的整表创建,头插法和尾插法,单链表整表删除;查找:顺序O(1),单链O(n);插入删除:顺序O(n),单链O(1)。
静态链表:用数组(每个数组元素由data和cur游标组成)描述的链表,用游标cur和数组下标实现指针的功能;适用于没有指针的高级语言实现单链表结构。
循环链表:将单链表中的终端结点由空指针改为指向头结点;与单链的区别:p->next为空或者指向头结点来终止循环。
双向链表:在单链的结点中再设指向前驱结点的指针域。
栈(stack)
1.定义:是限定只在表尾(栈顶top)插入和删除的线性表,即LIFO的线性表。
2.栈的插入(进栈、压栈 push);栈的删除(出栈、弹栈 pop);空栈:top == -1。
3.栈的顺序存储结构
空栈:top == -1;push和pop的实现通过修改栈顶指针top来实现;一个数组存储两个栈,分别在数组两端,栈空与栈满(两个栈顶指针相差1),要求两个栈的空间需求有相反关系时运用此数据结构有意义。
4.栈的链式存储结构
栈链:不需要头节点,栈空top = NULL;push和pop操作通过修改top指针实现;若元素个数变化大则用链栈,反之则用顺序栈。
5.栈的应用——递归:必须有递归的终止条件;递归算法是选择结构,易读和理解,但大量的递归调用会建立大量的函数副本,耗时间和内存;迭代是循环结构。
栈的应用——四则运算(后缀、逆波兰表示法):中缀表达式(标准四则运算)与中缀表达式的转换与计算。
队列(queue)
1.定义:是只允许在一端(队尾)插入,在另一端(队头)删除的线性表,即FIFO的线性表。
2.队列的顺序存储结构
一般的顺序存储存在假溢出的问题,对其改进得到循环队列(首位相连的顺序存储结构队列);循环队列满条件:(rear+1)%QueueSize == front(保留一个元素空间),循环队列长度公式:(raer-front+QueueSize)%QueueSize;循环队列的插入与删除操作的算法实现;循环队列缺点:数组可能溢出。
3.队列的链式存储结构
简称链队列,就是线性表的单链表(只能尾进头出而异);队满和队空的判断;入队(改rear指针)与出队(改front指针)操作的算法实现
4.循环队列必须有一个固定长度,可能存在浪费;链队列不存在这个问题,但会增加指针存储的空间开销。
转载于:https://blog.51cto.com/songhk0209/1435487
Learning Data Structure_2_线性表、栈和队列相关推荐
- c语言用两个栈构造队列伪码,数据结构习题线性表栈队列.doc
数据结构习题线性表栈队列 线性表(58) 1. 在单链表.双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少? 2.设线性表的 ...
- 【数据结构基础】线性数据结构——栈和队列的总结及封装(C和java)
前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...
- 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...
作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...
- 1、顺序存储:线性表/栈/队列:理论+C语言实现--详细
文章目录 Data_Structure 绪论 1.逻辑结构 1.集合结构 2. 线性结构 3.树形结构 4.图形结构 2.物理结构 1.顺序存储结构 2.链式存储结构 1 线性表的顺序存储 1.1 线 ...
- 数据结构-线性表之用队列实现栈用栈实现队列
文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...
- step3 . day4 数据结构之线性表 栈和队
补充一下:循环链表初学可能不好理解,除了多画图以外,把循环链表想象成无限的单向(或者双向)链表,每一个元素都是中间元素,就更好理解了. 1.栈和队是线性表的两种特殊管理逻辑,两者都是线性表 2.栈的原 ...
- Data Structure_数组_栈_队列_链表_霍夫曼
数组 数组在编码中很常见,就是把数据码成一排存放. 这就表示一个数组,这个数组有八个元素存放.对于元素的获取,主要就是通过下标获取,所以索引对于数组是很重要的,这个索引可以是有意义的,也可以是没有意义 ...
- 线性表------栈
1.基本概念 栈:只允许在一端插入或删除操作的线性表 栈底(buttom):固定的,不允许进行插入和删除操作的另一端 栈顶(top):线性表允许插入和删除的一段 栈是线性表,只不过受到限制了,只允许在 ...
- 线性表:顺序队列算法实现
顺序队列介绍 顺序队列是队列的顺序存储结构,顺序队列实际上是运算受限的顺序表.我们知道队列是一种先将先出的数据结构,它是一种受限制的线性表,我们的顺序队列是一种队列,采用的是顺序存储结构.与其对应的是 ...
最新文章
- 保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事
- 深入理解Java Stream流水线,学到了!
- 宅久伤身?最新研究:独居让免疫系统变强了,但阿尔兹海默风险也变高了
- Python(1) 整型与浮动型
- wp转shp_【收藏】空间数据格式转换方法
- SAP关于销售来自可选工厂的解决方案
- BZOJ 4259 FFT
- 最长公共回文子串(Longest_Common_Palindrome_Substring)
- Oracle绝对值函数
- primeNG DataTable中Templating ng-template标签报错
- Stein算法(求两个数最大公约数)
- 应用架构的核心使命是什么?阿里高级技术专家这样说
- c++ map初始化_Go学习每日一问(18)-map元素查找
- Xcode怎样调整模拟器大小
- pku 1511 Invitation Cards
- jmap查看java进程占用的数据库连接数
- (C语言)最长公共子串
- 深入理解kafka_深入理解Kafka随书代码示例已整理完毕,附地址~
- kindeditor上传图片php,kindeditor图片上传功能
- [BZOJ2109]Plane 航空管制
热门文章
- 使用 openssl 生成证书
- 使用appium时出现的问题
- 1.4. 为现有的应用程序添加 Core Data 支持(Core Data 应用程序实践指南)
- Codeforces 57C Array dp暴力找到规律
- armboot和内核文件系统烧写总结
- winhex搜索中的偏移问题?请高手指点
- TypeScript算法专题 - [双链表1] - 双链的概念及其实现
- c语言输出3位数逆序数,C语言求助!一个三位数的逆序数,总是编不对
- 加密和解密盐的使用_码农吐糟面试官:居然问我md5是对称加密还是非对称,故意的吧?...
- 怎么用Python写出随时间变化的字_面试必备 | 带你彻底搞懂 Python 生成器