一、栈

栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。(先进后出)

访问权限:栈限制了访问权限,只可以访问尾节点,也就是最后添加的元素 即栈顶的元素

 /**
* 栈 先进后出
* @author Administrator
*
*/
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(long 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 static void main(String[] args) {
MyStack myStack=new MyStack();
myStack.push(12);
myStack.push(10);
myStack.push(34);
myStack.push(40);
System.out.println(myStack.peek());
while(!myStack.isEmpty()){
System.out.print(myStack.pop() +", ");
}
System.out.println(myStack.isEmpty());
System.out.println(myStack.isFull());
}
}

二、队列
  队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),
而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front);

访问权限:队列限制了访问权限,只可以访问队头的数据,也就是最先添加的元素。

/**
* 队列 先进 先出
* @author Administrator
*
*/
public class MyQueue {
private long [] arr;
private int elements;//元素个数
private int front;//队列 头
private int end;//队列尾部
public MyQueue(){
arr=new long[10];
elements=0;
front=0;
end=-1;
}
public MyQueue(int size){
arr=new long[size];
elements=0;
front=0;
end=-1;
}
/**
* 添加数据 队列 从尾部添加
*/
public void insert(long value){
if(end==arr.length-1){
end=-1;
}
arr[++end]=value;
elements++;
}
/**
* 移除数据 队列从头部移出
*/
public long remove(){
long value=arr[front++];
if(front==arr.length){
front=0;
}
elements--;
return value;
}
/**
* 查看 队列头部的数据
*/
public long peek(){
return arr[front];
}
/**
* 查看 队列是否为空
* @return
*/
public boolean isEmpty(){
return elements==0;
}
/**
* 判断队列 是否满了
*/
public boolean isFull(){
return elements==arr.length;
}
public static void main(String[] args) {
MyQueue myQueue=new MyQueue();
myQueue.insert(1001);
myQueue.insert(1000);
myQueue.insert(1003);
myQueue.insert(1005);
System.out.println(myQueue.peek());
while(!myQueue.isEmpty()){
System.out.print(myQueue.remove()+", ");
}
System.out.println();
System.out.println(myQueue.isEmpty());
System.out.println(myQueue.isFull()); myQueue.insert(1007);
myQueue.insert(1002);
myQueue.insert(1008);
myQueue.insert(1009);
while(!myQueue.isEmpty()){
System.out.print(myQueue.remove()+", ");
}
System.out.println();
System.out.println(myQueue.isEmpty());
System.out.println(myQueue.isFull()); myQueue.insert(1010);
myQueue.insert(1012);
myQueue.insert(1018);
myQueue.insert(1019);
while(!myQueue.isEmpty()){
System.out.print(myQueue.remove()+", ");
}
System.out.println();
System.out.println(myQueue.isEmpty());
System.out.println(myQueue.isFull()); myQueue.insert(1021);
myQueue.insert(1022);
myQueue.insert(1023);
myQueue.insert(1024);
while(!myQueue.isEmpty()){
System.out.print(myQueue.remove()+", ");
}
System.out.println();
System.out.println(myQueue.isEmpty());
System.out.println(myQueue.isFull());
}
}

java实现栈与队列的更多相关文章

  1. 剑指Offer——Java实现栈和队列的互模拟操作

    剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列   题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型.   思路:其实就是把队列正常入 ...

  2. Java的栈和队列

    package com.ipmotor.sm.db;import java.util.LinkedList;import java.util.Queue;import java.util.Stack; ...

  3. Java 用栈实现队列

    栈是先入后出,队列是先入先出.根据这个思想,可以用一个栈作为入队,另一个栈作为出队.只要把第一个栈的栈顶的元素压入第二个栈就好了,出队的时候输出第二个栈的栈顶,如果第二个栈的空了就需要不断操作从第一个 ...

  4. 剑指 Offer 09. 用两个栈实现队列 +java中栈和队列的使用

    剑指 Offer 09. 用两个栈实现队列 题目链接 class CQueue { private Stack<Integer> sta1; private Stack<Intege ...

  5. Java 实现栈,队列

    package base.structure; /** * @program: Algorithm4J * @description: 实现一个Stack * @author: Mr.Dai * @c ...

  6. java实现栈和队列

    class Node { int val; Node next; Node(int x) { val = x; next = null; } } class Stack { Node top; pub ...

  7. 栈和队列的面试题Java实现【重要】

    栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...

  8. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  9. 栈和队列的面试题Java

    栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...

随机推荐

  1. 用eclipse搭建SSH(struts+spring+hibernate)框架

    声明: 本文是个人对ssh框架的学习.理解而编辑出来的,可能有不足之处,请大家谅解,但希望能帮助到大家,一起探讨,一起学习! Struts + Spring + Hibernate三者各自的特点都是什 ...

  2. ArcGIS10.1 api for Flex开发用于ArcGIS 9.3时QueryTask 'Error #2032'错误的解决方案

    因客户GIS软件需求,将应用降级到低版本ArcGIS9.3,不仅数据有些样式.配色.字符有些问题,API也要相应“降级”,解决如下: 利用9.3+flex做QueryTask时候出现了[RPC Fau ...

  3. 可变长度的Fibonacci数列

    原题目: Write a recursive program that extends the range of the Fibonacci sequence.  The Fibonacci sequ ...

  4. <Android>文件下载

    使用HTTP协议下载文件 创建一个URL对象 通过URL对象,创建一个HttpURLConnection对象 调用getInputStream()方法得到InputStream对象 从InputStr ...

  5. Java学习日记之 Java-IO流

    Java中的IO流在处理上分为字节流和字符流.字节流和字符流的区别 : 1.字节流读取的时候,读到一个字节就返回一个字节:  字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8 ...

  6. 项目文件""已被重命名或已不在解决方案中

    如题,这个错误在vs2010里,开始编译的时候出现了,我的解决办法就是把所有的project都移除,然后再添加进来,就不弹这个错误了.

  7. 工作随笔——Swift中的Range和一些字符操作

    截取字符串在Swift中相比OC要复杂很多,主要原因可能还是OC的NSRange的创建方法中参数类型为int,而Swift却对类型要求很严格,int不能作为参数创建Range,这要使用String中的 ...

  8. AngularJs 与Jquery的对比分析,超详细!

    闲来无事,在网上发现了一篇对比AngularJs和Jquery的文章.恰好最近自己也在研究AngularJs.特此收藏.需要的朋友可以参考. 原问题:假如我熟悉利用jQuery去开发客户端应用,那么我 ...

  9. WIN8应用隐私声明

    隐私权声明 本应用连接网络仅为控制硬件设备,不会收集你的个人信息,也不共享你个个人信息. 应用名称 雅典娜移动客户端 关于本应用 本应仅为控制设备应用,不关注任何配置相关信息,所有数据均来自服务器端. ...

  10. 03人人都应该了解的10个 jQuery 小技巧

    1  返回顶部按钮 你可以利用animate和scrollTop来实现返回顶部的动画,而不需要使用其他插件. // Back to top $('a.top').click(function () { ...