栈和队列是两种重要的数据结构。从数据结构的角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表,因此,可称为限定性的数据结构。
1、栈
1)抽象数据类型栈的定义
栈(stack)是限定仅在表尾进行插入或删除操作的线性表。对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地,表头端称为栈底(bottom)。不含元素的空表称为空栈。
假设栈 S = (a1,a2,...,an),则称 a1 为栈底元素,an 为栈顶元素,栈中元素按 a1,a2,...,an 的次序进栈,退栈的第一个元素应为栈顶元素。栈的修改是按后进先出的原则进行的。因此,栈又称为后进先出(last in first out)的线性表(简称 LIFO 结构)。插入元素的操作称为入栈,删除栈顶元素的操作称为出栈。
2)栈的表示和实现
和线性表类似,栈也有两种存储表示方法。
顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针 top 指示栈顶元素在顺序栈中的位置。
2、栈的引用举例
1)数制转换
十进制和八进制的转换,可以使用堆栈的方式进行,算法如下:
1 import java.util.*; 2 3 public class TDS0301_Conversion 4 { 5 public static void main(String[] args) 6 { 7 Scanner scanner = new Scanner(System.in); 8 LinkedList<Integer> stack = new LinkedList<>(); 9 10 int number; 11 12 System.out.print("Please input a number: "); 13 number = scanner.nextInt(); 14 while(number != 0) 15 { 16 int temp = number % 8; 17 stack.push(temp); 18 number = number / 8; 19 } 20 21 System.out.print("The Octal number is "); 22 while(!stack.isEmpty()) 23 { 24 System.out.print(stack.pop()); 25 } 26 System.out.println(); 27 } 28 }
2、括号匹配的检验
End