java栈和列队
来源:互联网 发布:何新 知乎 编辑:程序博客网 时间:2024/06/07 01:11
1:栈的构造和应用
栈的特点:先进后出,后进先出。
代码:
package CH03;
public class Mystack {
//底层实现是一个数组
private long[] arr;
private int top;//top表示栈顶
// 默认的构造方法
public Mystack() {
// TODO Auto-generated constructor stub
arr = new long[10];//初始化数组
top=-1;//因为初始化的时候栈顶是没有任何出口的
}
// 带参数的构造方法,参数为数组化初始化大小
public Mystack(int MaxSize){
arr=new long[MaxSize];
top=-1;
}
// 添加数据
public void push(int value){
arr[++top]=value;
//首先对top进行一个递增,开始为-1,现在为0,也就是arr[0]=value,第二次添加就是arr[1]=value
}
// 移除数据
public long pop(){
return arr[top--];
}
// 查看数据
public long peek(){
return arr[top];
}
// 判断是否为空
public boolean isEmpty(){
return top==-1;//为-1是为空的
}
// 判断是够栈满
public boolean isFull(){
//是否满的就看top是否等于数组的长度,减1是因为top是从0开始的
return top==arr.length-1;
}
}
===========
测试代码
package CH03;
public class TestStack {
public static void main(String[] args) {
Mystack mystack = new Mystack(4);
mystack.push(23);//插入数据
mystack.push(12);
mystack.push(40);
mystack.push(20);
//判断是够为空,判断是够栈满
System.out.println(mystack.isEmpty());
System.out.println(mystack.isFull());
//第一个返回false,第二个返回true
//查看栈顶
System.err.println(mystack.peek());//打印出20
while(!mystack.isEmpty()){
//打印出移除数据,20,40,12,23,这个和我加入进来的数据正好是相反的
System.out.print(mystack.pop()+" ");
}
//判断是够为空,判断是够栈满
System.out.println(mystack.isEmpty());
System.out.println(mystack.isFull());
}
}
2:列队的构造和应用
列队和栈完完全全不同的
顺序:
先进先出,后进后出,就像现实生活中的买票例子
package CH03;
public class Myqueue {
//底层是使用数组
private long[] arr;
// 有效数据的大小
private int elements;
// 对头
private int front;
// 队尾
private int end;
// 默认的构造方法
public Myqueue() {
// TODO Auto-generated constructor stub
// 初始化大小为10
arr = new long[10];
elements=0;
front=0;
end=-1;
}
// 带参数的构造方法,参数为数组的大小
public Myqueue(int maxSzie){
arr = new long[maxSzie];
elements=0;
front=0;
end=-1;
}
// 添加数据,从队尾插入
public void insert(long value){
arr[++end]=value;
elements++;//有效数据也要递增
}
// 删除数据,从对头删除
public long remove(){
elements--;
return arr[front++];
}
// 查看数据,从队头查看
public long peek(){
return arr[front];
}
// 判断是否为空
public boolean isEmpty(){
return elements==0;
}
// 判断是否满了
public boolean isFull(){
return elements==arr.length;
}
}
========
测试
package CH03;
public class TestQueue {
public static void main(String[] args) {
Myqueue mq = new Myqueue(4);
mq.insert(23);
mq.insert(3);
mq.insert(34);
mq.insert(90);
//判断是为空还是满
System.out.println(mq.isEmpty());
System.out.println(mq.isFull());
//查看数据,是23,队头
System.out.println(mq.peek());
while(!mq.isEmpty()){
System.out.print(mq.remove()+" ");
}
//判断是为空还是满
System.out.println(mq.isEmpty());
System.out.println(mq.isFull());
}
}
问题:如果再插入数据,就会出现数组越界的问题,用循环数组可以解决这个问题
==========
在这些代码改动
添加数据,从队尾插入
public void insert(long value){
if(end==arr.length-1){//当前end指向数组的最后一个元素
end=-1;
}
arr[++end]=value;
elements++;//有效数据也要递增
}
// 删除数据,从对头删除
public long remove(){
long value=arr[front++];//首先取得删除的数组
if(front==arr.length){//再判断front如果到了最后面的时候
front=0;
}
elements--;
return value;
}
//============
- java栈和列队
- 栈和列队
- 栈和列队
- java多线程总结(三)线程池和列队篇
- java实现循环列队
- Java代码实现列队基本操作
- (Java学习笔记7)列队的构建与应用
- 消息列队
- 战马列队
- 数据结构--列队
- 整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数、数组的分段和填充、数组与栈、数组与列队、回调函数、排序、计算、其他的数组函数等。
- 关于WINDOWS消息列队
- 列队顺逆报数
- MSMQ列队简介
- C 消息列队
- MQ 消息列队
- 列队在田野之中
- C#多线程工作列队
- 创建React项目工程及JSX相关语法
- HBase高级
- netstat 命令使用
- 局域网文件分享协议和方案的探究
- HRESULT的详细说明
- java栈和列队
- 页面校验写法总结
- java中的字符串在前台页面换行
- hadoop 的排序:key排序和分组排序
- opnfv compilation error 5-fuel-ui gulp
- Linux开源系统对比Windows闭源系统的优势解析
- linux应用层定时器
- 批量kill mysql processlist进程
- spring注解的方式读取properties文件中的内容