一、栈

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

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

 /**
* 栈 先进后出
* @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. 安卓奇葩问题之SQLite条件查找不到数据

    今天真是日了狗了. 先说需求:要做一个累死支付宝首页的可自定义的栏目.栏目是动态从后台获取的,所以就会有一个本地数据和后台数据的同步问题.为了方便对本地数据的增删改查,首先想到SQLite. 然后就写 ...

  2. bootstrap框架 导航条组件使用

    本文记载boot 导航条组件使用方法 导航条组件 导航条是在您的应用或网站中作为导航页头的响应式基础组件.它们在移动设备上可以折叠(并且可开可关),且在视口(viewport)宽度增加时逐渐变为水平展 ...

  3. MATLAB的crack安装小曲

    MATLAB的crack安装小曲 本学期要学数学模型和数值分析,需要用MATLAB,便琢磨着装MATLAB.我同专业的同学会装MATLAB的crack,他是数学协会的理事长,平时爱吹牛,问他一个简单的 ...

  4. 图片浏览(CATransition)转场动画

    Main.storyboard ViewController.m // //  ViewController.m //  8A04.图片浏览(转场动画) // //  Created by huan ...

  5. 【Android UI】:Fragment官方文档

    概述   Fragment表现Activity中UI的一个行为或者一部分.可以将多个fragment组合在一起,放在一个单独的activity中来创建一个多界面区域的UI,并可以在多个activity ...

  6. 主成分分析PCA的前世今生

    这篇博客会以攻略形式介绍PCA在前世今生. 其实,主成分分析知识一种分析算法,他的前生:应用场景:后世:输出结果的去向,在网上的博客都没有详细的提示.这里,我将从应用场景开始,介绍到得出PCA结果后, ...

  7. Linux环境变量配置

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运 ...

  8. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

  9. 跟visual studio 集成的git插件

    目前有三个,git extension,微软的 visual studio tools for git extension,还有git source control provider 经测试,最好用的 ...

  10. ASP.NET MVC3 Razor 初心者容易遇到的問題(转)

    这是一些相关的文章地址 http://demo.tc/Post/679 http://blog.csdn.net/cheny_com/article/details/6298496