一、栈

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

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

 /**
* 栈 先进后出
* @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. 根据用户IP获得所在城市

    运行以下代码即可<html> <head> <meta http-equiv="Content-Type" content="text/ht ...

  2. flask_分页

    一.提交博客文章 1.定义一个单字段的表单对象(form.py) class PostForm(Form): post = StringField('post', validators=[DataRe ...

  3. linux split 命令 将一个大的文件拆分成若干小文件

    . 以行数拆分 -l 参数: 原始文件 拆分后文件名前缀 例:以50行对文件进行拆分 big.txt small_ 拆分后会生成 small_aa small_ab small_ac ... . 以大 ...

  4. CSS3使用AnimationEnd为同一个元素添加多个动画效果

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name ...

  5. Jquery Mobile 学习笔记(一)

    1.模拟器,IOS:XCODE GENYMOTION  ANDROID:ECLIPSE GENYMOTION 2.jquery mobile data-role=page 代表一个页面 data-po ...

  6. WWDC2016的一点个人想法

    看了游戏审核的新闻和WWDC,感觉个人游戏开发者会很难混下去了,WWDC里面iMessage 透露出来的信息,我感觉微信有竞争者了,假如苹果把iMessage 打造成微信那种模式(聊天+第三方接入), ...

  7. [转]Android开发:Parallax效果的ScrollerView,改编自ParallaxListView

    https://github.com/nirhart/ParallaxScroll这个gethub上的地址 本文转自http://www.2cto.com/kf/201502/376970.html ...

  8. Refresh recovery area usage data after manually deleting files under recovery area

    Original source: http://www.dba-oracle.com/t_v$_flash_recovery_area.htm If you manually delete files ...

  9. windows编程:画线,简单的碰撞检测,简单的帧率锁定

    #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <windowsx.h> #include <mmsy ...

  10. Mac 问题

    1.mac siri有什么用? 语音功能,感觉用处不是特别大 2.mac iphone 复制粘贴 没找到该怎么做. 3.icloud dirver 类似dropbox,不过网络应该不太好,不靠谱.