java 数据结构之栈与队列
java数据结构之栈与队列
一:对列
队列是一种先进先出的数据结构
实现代码:
packageQueue;
/*
*使用java构建队列,并模拟实现队列的入队和出对方法
*/
publicclassQueue{//队列类
privateintmaxSize;//定义队列的长度
privateint[]arrQueue;//队列
privateintrear;//定义队列的尾指针
privateintfront;//定义队列的头指针
privateintempty;//元素的个数
publicQueue(ints)//初始化构造函数
{
maxSize=s;
arrQueue=newint[s];
rear=-1;
front=0;
empty=0;
}
//实现插入方法
publicvoidinsert(intm)
{
if(rear==maxSize-1)//处理循环
rear=-1;
arrQueue[++rear]=m;//对尾指针加一,把值放在队列结尾
empty++;//队列元素个数加1
System.out.println("队列入队元素为:"+m);
}
//实现出栈的方法,即取得队列的头元素
publicintremove()
{
inttemp=arrQueue[front++];//将栈顶元素赋值给temp,栈顶指针加1
if(front==maxSize)//处理循环
front=0;
empty--;//元素个数-1
returntemp;
}
//判断队列是否为空
publicbooleanisEmpty()
{
return(empty==0);
}
//判断对列是否为满
publicbooleanisFull()
{
return(empty==maxSize);
}
//返回队列长度
publicintqLong()
{
returnempty;
}
publicstaticvoidmain(String[]args){
Queueq=newQueue(5);//初始化队列为5个元素
q.insert(1);
q.insert(2);
q.insert(3);
q.insert(4);
q.insert(5);
intt1=q.remove();
System.out.println("队列元素出队:"+t1);
intt2=q.remove();
System.out.println("队列元素出队:"+t2);
System.out.println("队列是否为空:"+q.isEmpty());
System.out.println("队列是否为满:"+q.isFull());
System.out.println("队列的长度:"+q.qLong());
}
}
二:栈
栈是一种先进后出的数据结构
1:使用数组模拟栈
packageStatck;
/*
*使用java构建栈,并模拟实现栈的入栈和出栈方法
*使用数组实现
*/
publicclassStatck1{
privateintmaxSize;//栈的最多元素数
privateinttop;//栈顶指针
privateintlen;//栈的深度
privateint[]arrStack;//模拟栈
//栈的初始化
publicStatck1(ints){
maxSize=s;
len=0;
top=-1;
arrStack=newint[s];
}
//获取栈的长度
publicintgetLen(){
returnlen;
}
//获取当前栈还能插入多少个f元素
publicintgetLeaveLen(){
return(maxSize-len);
}
//判断栈是否满
publicbooleanisFull(){
return(len==maxSize);
}
//判断栈是否为空
publicbooleanisEmpty(){
return(len==0);
}
//元素入栈
publicvoidinStack(ints)
{
arrStack[++top]=s;//栈顶指针加1,入栈
System.out.println("元素入栈:"+s);
len++;//栈深度+1
}
//元素出栈
publicintoutStack()
{
inttemp=arrStack[top--];//赋值之后减1
System.out.println("元素出栈:"+temp);
len--;//栈深度-1
returntemp;
}
publicstaticvoidmain(String[]args){
Statck1s=newStatck1(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:使用链表模拟栈
packageStatck; importjava.util.ArrayList; importjava.util.EmptyStackException; importjava.util.List; /* *使用java构建栈,并模拟实现栈的入栈和出栈方法 *使用链表实现 */ publicclassStatck2{ privateList statck=newArrayList (); publicStatck2(){ //栈的初始化 } //清空栈 publicvoidclear(){ statck.clear(); System.out.println("清空栈.........."); } //判断栈是否为空 publicbooleanisEmpty(){ returnstatck.isEmpty(); } //获取栈顶元素 publicEgetTop(){ if(isEmpty()) returnnull; returnstatck.get(0); } //弹出栈操作 publicEpop(){ if(isEmpty()) thrownewEmptyStackException(); System.out.println(statck.size()+"\t出栈"); returnstatck.remove(statck.size()-1); } //压入栈操作 publicvoidpush(Ee){ statck.add(e); System.out.println(e+"\t入栈"); } //获取当前栈的深度 publicintgetStatckSize(){ if(isEmpty()) thrownewEmptyStackException(); returnstatck.size(); } publicstaticvoidmain(String[]args){ Statck2s=newStatck2(); 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()); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,如有疑问请留言或者到本站社区交流讨论,大家共同进步!