展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

使用数组模拟队列和栈

使用数组模拟队列

  • 案例1
public class Queue {
private int[] num= new int[5];
private int len=0;
public int size(){
return this.len;
}
//添加
public int add(int n){
if (len<num.length){
num[len]=n;
len++;
return len;
}else {
return -1; // 满了
}
}
//获取
public int get(){
if (len>0){
int n=num[0];
// 取出第一个后,往前移动
for (int i = 0; i < len-1; i++) {
num[i]=num[i+1];
}
len--;
return n;
}else {
return -1; // 取完了
}
}
}
  • 测试
public class test {
public static void main(String[] args) {
Queue q=new Queue();
// 添加
q.add(10);
q.add(20);
q.add(30);
q.add(40);
q.add(50);
// 输出长度
System.out.println(q.size());
// 遍历
while (q.size()>0){
System.out.println(q.get());
}
// 超出长度
q.add(10);
q.add(20);
q.add(30);
q.add(40);
int a = q.add(50);
int a1 = q.add(60);
System.out.println(q.size() + "," + a + "," + a1);
// 取完后
while (q.size()>0){
System.out.println(q.get());
}
System.out.println(q.get()); // 取完
}
}
  • 案例2
public class Que {
private int[] num= new int[3];
// 头指针
private int head=-1;
// 尾指针
private int end=-1;
// 已加入后的个数
private int len=0;
public int size(){
return this.len;
}
// 添加
public int add(int n){
if (len==num.length){
System.out.println("队列已加满");
return -1;
}else{
end++;
if(end>=num.length-1){ // [][][3],尾指针指向下标2时
end=0;
}
num[end]=n; // 尾指针先++,再添加
len++;
return len;
}
}
//获取
public int get(){
if (len==0){
System.out.println("队列已取完");
return -1;
}else{
head++;
if(head>=num.length-1){ // [1][2][],头指针指向下标2时
head=0;
}
int n = num[head]; // 头指针先++,再取值
len--;
return n;
}
}
}
  • 测试
public class test {
public static void main(String[] args) {
//[][][]
Que que=new Que();
que.add(10);
que.add(20);
que.add(30);
int q = que.add(40); // 满了
System.out.println(q);
que.get();
que.get();
int q1 = que.add(40); // 取2个后再加
System.out.println(q1);
que.get();
que.get(); // 取完了
int q2 = que.get();
System.out.println(q2);
}
}

使用数组模拟栈

  • 案例1
public class Zan {
int i=5; // 数组长度为5
private int[] num= new int[i];
private int len=0;
public int size(){
return this.len;
}
//添加
public void add(int n){
if(len<num.length){ //[1][2][3][4][]
for(int i=len; i>0; i--){
num[i]=num[i-1];
}
num[0]=n;
len++;
}else if(len==num.length){
System.out.println("已经满了");
}
}
// 获取
public int get(){
if(len==0){
System.out.println("取完了");
return -1;
}else{
int n=num[0];
for(int i=0; i<len-1; i++){ //[1][2][3][4][]
num[i]=num[i+1];
}
len--;
return n;
}
}
}
  • 测试
public class test3 {
public static void main(String[] args) {
Zan zan=new Zan();
zan.add(10);
zan.add(20);
zan.add(30);
zan.add(40);
zan.add(50);
System.out.println(zan.size());
zan.add(60); // 满了
int len = zan.size();
for (int i = 0; i < len; i++) {
System.out.print(zan.get() + ",");
}
System.out.println();
System.out.println(zan.size());
zan.get(); //取完了
}
}
posted @   DogLeftover  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-09-29 马踏棋盘算法
2022-09-29 弗洛伊德算法
2022-09-29 迪杰斯特拉算法
点击右上角即可分享
微信分享提示