java实现栈与队列
一、栈
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。(先进后出)
访问权限:栈限制了访问权限,只可以访问尾节点,也就是最后添加的元素 即栈顶的元素
/**
* 栈 先进后出
* @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实现栈与队列的更多相关文章
- 剑指Offer——Java实现栈和队列的互模拟操作
剑指Offer--Java实现栈和队列的互模拟操作 栈模拟队列 题目:JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 思路:其实就是把队列正常入 ...
- Java的栈和队列
package com.ipmotor.sm.db;import java.util.LinkedList;import java.util.Queue;import java.util.Stack; ...
- Java 用栈实现队列
栈是先入后出,队列是先入先出.根据这个思想,可以用一个栈作为入队,另一个栈作为出队.只要把第一个栈的栈顶的元素压入第二个栈就好了,出队的时候输出第二个栈的栈顶,如果第二个栈的空了就需要不断操作从第一个 ...
- 剑指 Offer 09. 用两个栈实现队列 +java中栈和队列的使用
剑指 Offer 09. 用两个栈实现队列 题目链接 class CQueue { private Stack<Integer> sta1; private Stack<Intege ...
- Java 实现栈,队列
package base.structure; /** * @program: Algorithm4J * @description: 实现一个Stack * @author: Mr.Dai * @c ...
- java实现栈和队列
class Node { int val; Node next; Node(int x) { val = x; next = null; } } class Stack { Node top; pub ...
- 栈和队列的面试题Java实现【重要】
栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...
- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...
- 栈和队列的面试题Java
栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...
随机推荐
- c# DataTable 转为 List 类型
代码: public class ModelConvertHelper<T> where T : new() { public static IList<T> ConvertT ...
- 带有两个输入字段和相关标记的简单 HTML 表单:
带有两个输入字段和相关标记的简单 HTML 表单: 意思就是说Male 和id="male"绑定在一起. <html> <body> <p> ...
- C# final project
Problem Statement You are tasked with developing a task manager. The task manager will allow people ...
- MFC学习随笔(2)
在MFC中,有时需要多个类之间传递信息,一个共通的头文件是个不错的选择.如果在头文件中直接声明一个变量的话,势必会报出一个错误: error LNK2005: "struct my_glob ...
- BI先特技软件 Analyzer安装时的部分问题
废话不多,先看第一个问题,我先运行了 Analyzer.3.0.2357b.64.exe 然后就是傻瓜式地下一步 好的,现在问题来了,当我运行安装完毕的Analyzer时,页面给了我这样的提示“ HT ...
- 一种基于Orleans的分布式Id生成方案
基于Orleans的分布式Id生成方案,因Orleans的单实例.单线程模型,让这种实现变的简单,贴出一种实现,欢迎大家提出意见 public interface ISequenceNoGenerat ...
- 【Bugly 技术干货】Android开发必备知识:为什么说Kotlin值得一试
1.Hello, Kotlin Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 1. ...
- 使用C#设计Fluent Interface
我们经常使用的一些框架例如:EF,Automaper,NHibernate等都提供了非常优秀的Fluent Interface, 这样的API充分利用了VS的智能提示,而且写出来的代码非常整洁.我们如 ...
- .net开发笔记(十二) 设计时与运行时的区别(续)
上一篇博客详细讲到了设计时(DesignTime)和运行时(RunTime)的概念与区别,不过没有给出实际的Demo,今天整理了一下,做了一个例子,贴出来分享一下,巩固前一篇博客讲到的内容. 简单回顾 ...
- C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)
上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/392 ...