java栈队列实现初始化栈s_java 数据结构之栈与队列

这篇博客介绍了如何使用Java实现数据结构中的栈和队列。首先详细讲解了队列,包括其先进先出的特性,以及用数组模拟实现队列的入队和出队操作。接着,文章探讨了栈,一种先进后出的数据结构,提供了两种实现方式:数组模拟栈和链表模拟栈。通过实例展示了如何进行元素的入栈和出栈操作。
摘要由CSDN通过智能技术生成

java 数据结构之栈与队列

一:对列

队列是一种先进先出的数据结构

实现代码:

package queue;

/*

* 使用java构建队列,并模拟实现队列的入队和出对方法

*/

public class queue { //队列类

private int maxsize; //定义队列的长度

private int[] arrqueue; //队列

private int rear; //定义队列的尾指针

private int front; //定义队列的头指针

private int empty; //元素的个数

public queue(int s) //初始化构造函数

{

maxsize = s;

arrqueue = new int[s];

rear = -1;

front=0;

empty = 0;

}

//实现插入方法

public void insert(int m)

{

if(rear == maxsize-1) //处理循环

rear = -1;

arrqueue[++rear] = m; //对尾指针加一,把值放在队列结尾

empty++; //队列元素个数加1

system.out.println("队列入队元素 为:" + m);

}

//实现出栈的方法,即取得队列的头元素

public int remove()

{

int temp = arrqueue[front++]; //将栈顶元素赋值给temp,栈顶指针加1

if(front == maxsize) //处理循环

front = 0;

empty--; //元素个数-1

return temp;

}

//判断队列是否为空

public boolean isempty()

{

return (empty==0);

}

//判断对列是否为满

public boolean isfull()

{

return (empty == maxsize);

}

//返回队列长度

public int qlong()

{

return empty;

}

public static void main(string[] args) {

queue q = new queue(5); //初始化队列为5个元素

q.insert(1);

q.insert(2);

q.insert(3);

q.insert(4);

q.insert(5);

int t1 = q.remove();

system.out.println("队列元素出队:" + t1);

int t2 = q.remove();

system.out.println("队列元素出队:" + t2);

system.out.println("队列是否为空:" + q.isempty());

system.out.println("队列是否为满:" + q.isfull());

system.out.println("队列的长度:" + q.qlong());

}

}

二:栈

栈是一种先进后出的数据结构

1:使用数组模拟栈

package statck;

/*

* 使用java构建栈,并模拟实现栈的入栈和出栈方法

* 使用数组实现

*/

public class statck1 {

private int maxsize; //栈的最多元素数

private int top; //栈顶指针

private int len; //栈的深度

private int[] arrstack; // 模拟栈

//栈的初始化

public statck1(int s){

maxsize = s;

len =0;

top= -1;

arrstack = new int[s];

}

//获取栈的长度

public int getlen(){

return len;

}

//获取当前栈还能插入多少个f元素

public int getleavelen(){

return (maxsize-len);

}

//判断栈是否满

public boolean isfull(){

return (len==maxsize);

}

//判断栈是否为空

public boolean isempty(){

return (len ==0);

}

//元素入栈

public void instack(int s)

{

arrstack[++top] = s; //栈顶指针加1,入栈

system.out.println("元素入栈:" + s);

len ++ ;//栈深度+1

}

//元素出栈

public int outstack()

{

int temp = arrstack[top--];//赋值之后减1

system.out.println("元素出栈:" + temp);

len--; //栈深度-1

return temp;

}

public static void main(string[] args) {

statck1 s = new statck1(5);

s.instack(1);

s.instack(2);

s.instack(3);

s.instack(4);

s.instack(5);

s.outstack();

s.outstack();

system.out.println("栈的长度:" + s.getlen());

system.out.println("还能入栈元素个数:" + s.getleavelen());

system.out.println("栈的是否为空:" + s.isempty());

system.out.println("栈的是否为满:" + s.isfull());

}

}

2:使用链表模拟栈

package statck;

import java.util.arraylist;

import java.util.emptystackexception;

import java.util.list;

/*

* 使用java构建栈,并模拟实现栈的入栈和出栈方法

* 使用链表实现

*/

public class statck2 {

private list statck = new arraylist();

public statck2(){

//栈的初始化

}

//清空栈

public void clear(){

statck.clear();

system.out.println("清空栈..........");

}

//判断栈是否为空

public boolean isempty(){

return statck.isempty();

}

//获取栈顶元素

public e gettop(){

if(isempty())

return null;

return statck.get(0);

}

//弹出栈操作

public e pop(){

if (isempty())

throw new emptystackexception();

system.out.println(statck.size() + "\t 出栈");

return statck.remove(statck.size() - 1);

}

//压入栈操作

public void push(e e){

statck.add(e);

system.out.println(e + "\t 入栈");

}

//获取当前栈的深度

public int getstatcksize(){

if(isempty())

throw new emptystackexception();

return statck.size();

}

public static void main(string[] args) {

statck2 s = new statck2();

s.clear(); //清空栈

system.out.println("当前栈是否为空:" + s.isempty());

s.push(1);

s.push(2);

s.push(3);

s.pop();

system.out.println("当前栈的深度为:" + s.getstatcksize());

system.out.println("当前栈顶元素为:" + s.gettop());

}

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,如有疑问请留言或者到本站社区交流讨论,大家共同进步!

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值