一、栈

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

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

 /**
* 栈 先进后出
* @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. redis迁移工具-redis-migrate-tool使用测试

    https://github.com/vipshop/redis-migrate-tool一.安装redis-migrate-tool a.下载redis-migrate-tool软件包 https: ...

  2. Spring中获取数据库表主键序列

    在程序开发中,我们经常有写数据库表的操作,数据表中经常带有主键自增序列,如何获取自增序列.spring中提供了相应的类 DataFieldMaxValueIncrementer. DataFieldM ...

  3. NIO概述

    NIO API从Java1.4开始引用起就被广泛应用所使用.NIO API自带了IO非阻塞操作. java.nio.*包的结构: · Buffers 作为数据容器 · Chartsets 将容器中的数 ...

  4. FMDB读取Datetime类型值为1970的问题

    1.问题 今天使用FMDB做一个例子程序,新建的一张表有一个datetime字段,数据库有默认值,大概如下 CREATE TABLE [ConsumptionType] ([id] INTEGER P ...

  5. test-output目录中找不到testng-fail.xml原因+Reportng+ant build.xml文件

    test-output目录中找不到testng-fail.xml原因: 在没有加入Reportng 报告的相关jar包前,在test-output目录下是有testng-fail.xml,后面加入了R ...

  6. SHELL实现同时操作多个服务器:服务器批量管理

    引言:     1.如果你想知道你所管理的几万台服务器的/home分区使用率是多少.     2.如果你想为你所管理的几万台服务器添加同一个计划任务你该怎么办?     3.如果你想让你所管理的几万台 ...

  7. java的值传递和引用传递

    昨天博主在对于值传递和引用传递这里栽了一个大坑啊,导致一下午时间都浪费在这里,我们先说下值传递和引用传递java官方解释: 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对 ...

  8. mysql 数值函数

    可使用常见的算术操作符.注意就 -. +和 *而言, 若两个参数均为正数,则其计算结果的精确度为 BIGINT (64比特),若其中一个参数为无符号整数, 而其它参数也是整数, 则结果为无符号整数.请 ...

  9. CentOS7 bonding配置

    操作系统:CentOS Linux release 7.1.1503 (Core) 网卡适配器: eno1.eno2 bonding类型:mode=1 (active-backup),主-备份策略 网 ...

  10. Sprint评分表

    组名:第七班                                             姓名:王炳午 1.Cs 小分队: 项目: 游戏与办公的集合一些小的程序的整合有2048,倒计时,记 ...