基本数据结构简记
简单记录一下常见的一些数据结构的概念,不包含树和图。
一、线性数据结构
1、主要成员(或形式)
栈,队列,双端队列,列表
2、特点
有两端
区分方式:元素添加与移除方式
二、栈
1、特点
添加与移除总发生在同一端
排序原则:后进先出(LIFO)
2、补充
栈不能用于查找
程序内存分区中的堆栈概念与算法中堆栈概念不同,算法中的堆式一种特殊的二叉树,具体概念不在此处记录
三、队列
1、特点
添加操作在尾部,移除操作在头部
排序原则:先进先出(FIFO)
2、双端队列
在哪一端添加或移除无限制
排序原则,无要求,取决于使用者
3、优先级队列
优先级队列从头部移除元素,不过元素的逻辑顺序是由优先级决定的。优先级最高的元素在最前,优先级最低的元素在最后。
四、列表(链表)
1、特点
每一个元素都有一个相对于其他元素的位置
数组的线性顺序是由数组下标决定的,链表的顺序是由各个对象里的位置指向决定的
链表可分:单链接双链接,已排序未排序,循环非循环
2、单链接与双链接
单链接链表只有后向链接,双链接链表有前向与后向两个链接
3、已排序未排序
已排序链表, 链表的线性顺序与链表元素中关键字的线性顺序一致,未排序链表, 元素可以以任何顺序出现
4、循环非循环
循环链表,表头元素的 prev 指针指向表尾元素,而表尾元素的 next 指针则指向表头元素,形成一个圆环
五、数组与集合
1、数组
数组是计算机科学中最基本的数据结构之一。如果你用过数组,那么应该知道它就是一个含有数据的列表。 此外,我们会用一些名为索引的数字来标识每项数据在数组中的位置
2、集合
集合。它是一种不允许元素重复的数据结构 其实集合是有不同形式的,但现在我们只讨论基于数组的那种。这种集合跟数组差不多,都是一个普通的元素列表,唯一的区别在于,集合不允许插入重复的值。
六、散列表(hashtable 哈希表)
1、概念
普通数组概念的推广, 是实现字典操作的一种有效数据结构, 也被称为散列映射、映射、字典和关联数组
一种包含额外逻辑的数据结构
数组和链表都被直接映射到内存,但散列表更复杂,它使用散列函数来确定元素的存储位置
2、散列函数
散列函数是构造散列表的关键,一般来说,散列函数应该有以下特点
一致性 同样的输入返回的结果是一致的,同样的,不同的输入返回的结果一般也不同(按我的理解可以相同,但这样的散列表没有意义)
有效性 散列函数只返回有效结果(不会有返回超出散列表范围的数据发生)
3、字典
字典是由一些关键字与对应的值组成的数值对进一步组成的集合,除非是多重字典,字典中任意两个数值对,关键字都不等
散列表很方便的实现了字典,但字典不是只能用散列表实现,还可以使用线性表和跳表的方法实现
跳表是一种扩充了额外(向前)指针的链表,本文暂不记录