Java实现
/*
*
* @auther: 巨未
* @DATE: 2019/1/5 0005 18:29
* @Description: 顺序栈
*/
class MyStackK {
private int[] elem;
private int top;
public MyStackK() {
this(10);
}
public MyStackK(int size) {
this.elem = new int[size];
this.top = 0;
}
//入栈
public void push(int val) {
if (isFull()) {
return;
}
this.elem[this.top++] = val; //放一个值,top+1
}
//出栈
public void pop() {
if (isEmpty()) {
return;
}
this.top--;
}
//判满
public boolean isFull() { //top是否等于数组elem的长度
if (this.top == this.elem.length) {
return true;
}
return false;
}
//判空
public boolean isEmpty() {
if (this.top == 0) {
return true;
}
return false;
}
//得到栈顶元素
public int getTop() {
if (isEmpty()) {
throw new UnsupportedOperationException("栈为空!");
}
return this.elem[this.top-1];
}
//得到栈顶元素并且删除
public int getTop1() {
if (isEmpty()) {
throw new UnsupportedOperationException("栈为空!");
}
int data = this.elem[this.top-1];
return data;
}
//打印栈内元素
public void show(){
for(int i = 0;i < this.top;i++){
System.out.print(this.elem[i] +" ");
}
}
}
public class CStackDemo {
/*
*
* 两个栈实现一个队列: 入队
* @param s1
* @param val
*/
public static void pushQueue(MyStackK s1, int val) {
//先入栈:
s1.push(val);
}
/**
*两个栈实现一个队列: 出队
* @param s1
* @param s2
* @return
*/
public static int popQueue(MyStackK s1, MyStackK s2) {
//把所有数据放到s2
if (s2.isEmpty()) {
int tmp = 0;
while (!s1.isEmpty()) {
tmp = s1.getTop();
s2.push(tmp);
}
}
//将s2栈顶元素出栈
int tmp2 = 0;
if (!s2.isEmpty()) {
tmp2 = s2.getTop();
}else {
System.out.println("队列为空!");
}
return tmp2;
}
public static void main(String[] args) {
MyStackK myStackK = new MyStackK();
myStackK.push(1);
myStackK.push(2);
myStackK.push(4);
myStackK.push(9);
myStackK.push(3);
myStackK.pop();
System.out.println(myStackK.getTop());
myStackK.show();
}
}