程序 = 数据结构 + 算法
(本文较为基础,仅适合入门)
理解数据结构
数据结构是计算机存储、组织数据的方式;
学好数据结构可以编写出更加优雅,更加有效率的代码;
理解数据结构之栈(stack)
特点:后进先出(First In Last Out —— FILO)
eg. 机枪弹夹
空栈:栈为空时;
压栈(入栈):向栈中存入数据
弹栈(出栈):将数据取出的过程
栈底(bottom):不允许被改变
栈顶(top):随着数据的出入而改变
栈是运算受限的线性表;其限制仅允许在表的一端进行插入和删除操作,不允许在其它任何位置进行增、删、改、查等操作。允许插入删除变化的一端称为栈顶(Top),固定的一端称为栈底(Bottom)。
示例代码:
// 后进先出
Stack<String> stack = new Stack<String>();
stack.push("杨过");
stack.push("郭襄");
stack.push("小龙女");
System.out.println(stack);
// 弹栈
String pop = stack.pop();
System.out.println("弹出了谁" + pop);
System.out.println("还剩谁:" + stack);
输出结果:
[杨过, 郭襄, 小龙女]
弹出了谁:小龙女
还剩谁:[杨过, 郭襄]
注:若弹出数据长度大于栈,则会出现异常;
理解数据结构之队列(Queue)
先进先出的有序列表(First In First Out —— FIFO)
eg.车过高速公路消费站,排队买票;
队列是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除;
头部(front);
尾部(rear);
入列(入队);
出列(出队);
当向队列插入一个元素头部尾部都指向这一元素
// 查看源码可发现 Queue 实现了 Linklist
// 可使用Linklist 演示
LinkedList<String> queue = new LinkedList<String>();
queue.add("孙猴子");
queue.add("小白龙");
queue.add("御弟哥哥");
System.out.println(queue);
String value = queue.pop();
System.out.println(value);
System.out.println(queue);
输出结果:
[孙猴子, 小白龙, 御弟哥哥]
孙猴子
[小白龙, 御弟哥哥]