本帖最后由 朱晓杰 于 2013-5-12 14:52 编辑
用集合模拟堆(先进先出)和栈(后进先出)
1、堆和栈概述
堆是堆,栈是栈.
栈是先进后出,就像叠盘子,后面叠上去的就要先拿出来,第一个要最后拿出来;而堆是顺序随意的.自己对数据结构还不怎么了解,请各位黑马多多发表自己的见解,我最近也在看数据结构的视频,给大家推荐一下:http://wenku.baidu.com/course/view/4fde50e2524de518964b7d01?fr=view
- import java.util.LinkedList;
- /*
- * 栈:后进先出,底层用LinkedList实现
- * 参照java.util.Stack;
- * */
- class MyStack {
- private LinkedList list;
- MyStack(){
- list = new LinkedList();
- }
-
- public boolean isNull(){//测试栈是否为空
- return list.isEmpty();
- }
-
- public Object peek(){//查看栈顶对象而不移除它
- return list.peek();
- }
-
- public Object pop(){//移除栈顶对象并作为此函数的返回值
- return list.pollFirst();
- //return list.pollLast();
- }
-
- public void push(Object obj){//把项压入栈顶
- list.addFirst(obj);
- }
- }
- public class MyStackTest{
- public static void main(String[] args) {
- MyStack ms = new MyStack();
- ms.push("java01");
- ms.push("java02");
- ms.push("java03");
- ms.push("java04");
- /*后进先出*/
- while(!ms.isNull()){
- System.out.println(ms.pop());
- }
- }
- }
复制代码- /*
- 使用LinkedList模拟堆栈和队列
- 堆栈:先进后出(杯子) FILO
- 队列:先进先出(水管) FIFO
- */
- import java.util.*;
- import static java.lang.System.*;
- class LinkedListDemo
- {
- public static void main(String[] args)
- {
- DuiLie dl = new DuiLie();
- dl.myAdd("java01");
- dl.myAdd("java02");
- dl.myAdd("java03");
- dl.myAdd("java04");
-
- /*out.println("后进先出:");
- while(!dl.isNull()){
- out.println(dl.myGetFILO());
- }*/
- out.println("先进先出:");
- while(!dl.isNull()){
- out.println(dl.myGetFIFO());
- }
- }
- }
- class DuiLie
- {
- private LinkedList list;
-
- public DuiLie(){
- list = new LinkedList();
- }
- public void myAdd(Object obj){
- list.offerFirst(obj);
- }
- public Object myGetFIFO(){//先进先出
- return list.removeLast();
- }
- public Object myGetFILO(){//先进后出
- return list.removeFirst();
- }
- public boolean isNull(){
- return list.isEmpty();
- }
- }
复制代码 |