我是靠谱客的博主 美好飞机,最近开发中收集的这篇文章主要介绍栈的递归实现(不破坏栈的结构),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在不破坏栈的结构的情况下,实现了栈的递归遍历、查询指定下标的元素和查询指定元素的下标。
栈的规范

public interface IStack {
//1 入栈
boolean
push(Object obj);
//	2 出栈
Object pop();
//	3 判断栈是否为空
boolean isEmpty();
//	4 判断栈是否已满
boolean isFull();
//	5 返回栈顶元素
Object peek();
//	6 返回元素在栈中的位置
int getIndex(Object obj);
//	7 返回栈的实际长度
int size();
//	8 返回栈的容量
int getStackSize();
//	9
打印栈
void
display();
//
10 返回栈中指定位置的元素
Object getObjectByIndex(int index);
}

栈的递归实现

public class MyStack implements IStack {
private static final int MAX_SIZE = 5;
private static Object[] data = new Object[MAX_SIZE];
private static int top = -1;//[0,4],表示当前存放的位置
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.push(4);
myStack.pop();
myStack.pop();
System.out.println("size:"+myStack.size());
myStack.display();
myStack.push(5);
myStack.push(6);
myStack.display();
System.out.println("size:"+myStack.size());
System.out.println("指定下标的元素为:"+myStack.getIndex(2));
System.out.println("指定下标的元素为:"+myStack.getIndex(6));
myStack.display();
}
@Override
public boolean push(Object obj) {
if (isFull()) return false;
data[++top] = obj;
return true;
}
@Override
public Object pop() {
if (isEmpty()) return null;
Object res = data[top--];
return res;
}
@Override
public boolean isEmpty() {
return top == -1;
}
@Override
public boolean isFull() {
return top >= MAX_SIZE - 1;
}
@Override
public Object peek() {
if (isEmpty()) return null;
return data[top];
}
@Override
public int getIndex(Object obj) {
if(size()==0) return -1;
Object o = pop();
if(o!=obj) {
int idx =
getIndex(obj);
push(o);
return idx;
}else{
push(o);
return size()-1;
}
}
@Override
public int size() {
return top+1;
}
@Override
public int getStackSize() {
return MAX_SIZE;
}
@Override
public void display() {
System.out.print("当前栈内元素为:");
dfs();
System.out.println();
}
public void dfs(){
if(size()==0) return ;
Object o =pop();
dfs();
push(o);
System.out.print(o+" ");
}
@Override
public Object getObjectByIndex(int index) {
Object res = pop();
if(res ==null) return null;
if(size()!=index){
Object element = getObjectByIndex(index);
push(element);
return element;
}
else return res;
}
}

最后

以上就是美好飞机为你收集整理的栈的递归实现(不破坏栈的结构)的全部内容,希望文章能够帮你解决栈的递归实现(不破坏栈的结构)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部