栈是一种特殊的线性表。
其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。
队列(Queue)也是一种运算受限的线性表。
它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front)
线性表是一种常用的数据结构。
- 在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。
- 由于这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率都是至关重要的。
- 线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没有后继但有一个前驱结点,其它的结点都有且仅有一个前驱和一个后继结点。
特征:
1.集合中必存在唯一的一个“第一元素”;
2.集合中必存在唯一的一个 “最后元素” ;
3.除最后一个元素之外,均有 唯一的后继(后件);
4.除第一个元素之外,均有 唯一的前驱(前件)。
线性表的顺序表示:ArrayList
一般使用数组(C语言中的数组采用顺序存储方式。即连续地址存储)来描述。
优点:在于随机访问元素,
缺点:插入和和删除的时候,需要移动大量的元素。
线性表的链表表示LinkedList
优点:对于新增和删除操作add和remove和方便。不需要移动元素。
数组和记录在很多程序设计语言中都作为固有数据类型。通过使用指针数据类型和动态存储分配,很多程序设计语言也提供构造链接结构的设施。数组、记录和链接结构提供了实现所谓更高一级抽象的基本构件。
栈和队列,对计算至关重要。
栈是这样一种数据类型,其主要属性是由支配其元素的插入与删除的规则来决定的,被删除或移去的元素只能是最后插入的,即所谓具有后进先出(LIFO)性质或规范。
数据类型栈的简单性使人对其重要性产生误解。许多计算机系统把栈做成其电路,并有操作这种硬件栈的机器指令。子例程的调用和返回序列都服从栈协议。算术表达式的求值都是通过对栈的操作序列来实现的。很多手持计算器都是用栈方式来操作的。在学习计算机科学时,将能看到许多栈的例子。
队列在日常生活中经常出现并且为我们所熟悉。在银行等待服务或在电影院门口等待买票的一队人,在红灯前等待通行的一长串汽车,都是队列的例子。队列的主要特征是遵循先来先服务(First Come,first served)的原则。与栈后进先出的特征不同,在队列中,最先插入的元素将最先除去或接受服务,这样的原则与社会生活中人们公正与平等的意识是一致的。
队列的先进先出(FIFO)原则在计算机中有很多应用。例如,在多用户分时操作系统中,等待访问磁盘驱动器的多个输入输出(I/O)请求就可能是一个队列。等待在计算机中运行的作业也形成一个队列,计算机将按照作业和I/O请求到达的先后次序进行服务,也就是按先进先出的次序服务。