数据结构与算法(三)栈&&队列
2017-04-28 13:56
381 查看
1. 栈(stack)的构造与应用
栈可以理解为一个箱子,存放数据的时候是先放进去的在底部,后放进去的在顶部,因此满足先进后出,后进先出。
测试:
2. 列队(queue)的构造和应用
列队可以考虑为一个火车票窗口买票,先排的人先获得服务,后排的人后获得服务,因此满足先进先出,后进后出(即先来后到)。
测试:
栈可以理解为一个箱子,存放数据的时候是先放进去的在底部,后放进去的在顶部,因此满足先进后出,后进先出。
public class MyStack { //底层实现是一个数组 private long[] arr; private int top; /* * 默认的构造方法 */ public MyStack(){ arr=new long[10]; top=-1; } /* * 带参数构造方法,参数为数组初始化大小 */ public MyStack(int maxsize){ arr=new long[maxsize]; top=-1; } /* * 添加数据 */ public void push(int value){ arr[++top]=value; } /* * 移除数据 */ public long pop(){ return arr[top--]; } /* * 查看数据 */ public long peek(){ return arr[top]; } /* * 判断是否为空 */ public boolean isEmpty(){ return top==-1; } /* * 判断是否满了 */ public boolean isFull(){ return top==arr.length-1; } }
测试:
public class TestMyStack { public static void main(String[] args) { // TODO Auto-generated method stub MyStack ms=new MyStack(4); ms.push(23); ms.push(12); ms.push(1); ms.push(90); System.out.println(ms.isEmpty()); System.out.println(ms.isFull()); System.out.println(ms.peek()); System.out.println(ms.peek()); while(!ms.isEmpty()){ System.out.print(ms.pop()+","); } System.out.println(); System.out.println(ms.isEmpty()); System.out.println(ms.isFull()); } }
2. 列队(queue)的构造和应用
列队可以考虑为一个火车票窗口买票,先排的人先获得服务,后排的人后获得服务,因此满足先进先出,后进后出(即先来后到)。
public class MyQuene { //底层使用数组 private long[] arr; //有效数据大小 private int elements; //队头 private int front; //队尾 private int end; /* * 默认构造方法 */ public MyQuene(){ arr= new long[10]; elements=0; front=0; end =-1; } /* * 带参数的构造方法,参数为数组大小 */ public MyQuene(int maxsize){ arr=new long[maxsize]; elements=0; front=0; end=-1; } /* * 添加数据,从队尾插入 */ public void insert(long value){ arr[++end]=value; elements++; } //循环列 队 // public void insert(long value){ // if(end==arr.length-1){ // end=-1; // } // arr[++end]=value; // elements++; // } /* * 删除数据,从队头删除 */ public long remove(){ elements--; return arr[front++]; } //循环列队 // public long remove(){ // long value=arr[front++]; // if(front==arr.length){ // front=0; // } // elements--; // return value; // } /* * 查看数据,从队头查看 */ public long peek(){ return arr[front]; } /* * 判断是否为空 */ public boolean isEmpty(){ return elements==0; } /* * 判断是否满了 */ public boolean isFull(){ return elements==arr.length; } }
测试:
public class TestMyQueue { public static void main(String[] args) { // TODO Auto-generated method stub MyQuene mq=new MyQuene(4); //MyCycleQuene mq=new MyCycleQuene(4); mq.insert(23); mq.insert(45); mq.insert(13); mq.insert(1); System.out.println(mq.isFull()); System.out.println(mq.isEmpty()); System.out.println(mq.peek()); System.out.println(mq.peek()); while(!mq.isEmpty()){ System.out.print(mq.remove()+","); } //循环列队测试 // System.out.println(); // mq.insert(23); // mq.insert(45); // mq.insert(13); // mq.insert(1); // while(!mq.isEmpty()){ // System.out.print(mq.remove()+","); // } System.out.println(); System.out.println(mq.isFull()); System.out.println(mq.isEmpty()); } }
相关文章推荐
- 数据结构与算法01--堆栈 & 队列
- 【转】 [翻译]C#数据结构与算法 – 前言&第一章 (原文:http://www.cnblogs.com/lsxqw2004/archive/2009/07/01/1366118.html)
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 【数据结构与算法】Huffman树&&Huffman编码(附完整源码)
- 数据结构与算法JavaScript (二) :队列
- 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
- [翻译]C#数据结构与算法 – 第五章栈与队列(Part 2)
- 数据结构与算法学习笔记——队列
- 【数据结构与算法】Huffman树&&Huffman编码(附完整源码)
- 数据结构与算法_两个栈实现一个队列的功能
- 数据结构与算法JavaScript (二) 队列
- 优先队列的实现 Java数据结构与算法
- 4.[数据结构和算法分析笔记]队列 Queue
- Java数据结构与算法之栈和队列
- [数据结构与算法]第一周(一):线性表---多项式加法&&字符串插入
- [翻译]C#数据结构与算法 – 第五章栈与队列(Part 1)
- [翻译]C#数据结构与算法 – 第五章栈与队列(Part 2)
- 【数据结构与算法】队列
- (4) 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
- 【算法学习笔记】06.数据结构基础 队列与堆栈初步