您的位置:首页 > 理论基础 > 数据结构算法

数据结构2—Java_栈_顺序存储

2016-03-02 16:13 477 查看

一、定义接口

package Statck;

public interface IStatck<T> {

/**
* 压栈
* @param t
*/
public void push(T t);

/**
* 弹栈
*/
public T Pop();

/**
* 返回元素个数
* @return
*/
public int StackLength();

/**
* 清空栈
*/
public void ClearStack();
}


二、自定义类

package Statck;

public class MStack<T> implements IStatck<T> {

private int top=-1;
Object[] objArray ;
int MAX;

/**
* 构造函数,初始化数组大小
* @param n
*/
MStack(int n){
MAX=n;
objArray = new Object[MAX];

}

/**
* 压栈
*/
@Override
public void push(T t) {
if(top>=MAX-1){//top==Max-1时满栈
throw new RuntimeException("超出栈上线");
}else{
top++;
objArray[top]=t;

}
}

/**
* 弹栈
*/
@Override
public T Pop() {
if(top==-1){
throw new RuntimeException("空栈,无法弹出元素");
}else{
T t =(T)objArray[top];
top--;
return t;
}
}

/**
* 长度
*/
@Override
public int StackLength() {

return top+1;
}

@Override
public void ClearStack() {
if(top>-1){
for(int i=0;i<top;i++){
objArray[i]=null;
}
}
}
}


三、测试代码

package Statck;

import java.util.Random;

public class TestStack {

MStack<Integer> stack ;

final int MAXVALUE=15;
Random r = new Random();

public static void main(String[] args){
TestStack ts = new TestStack();
ts.initStack(10);
ts.pushData();
}

/**
* 初始化,
* @param length 栈长度
*/
private void initStack(int length){
stack = new MStack<Integer>(length);
}

/**
* 压栈——弹栈——显示
*/
private void pushData(){

int length = Math.abs(r.nextInt(MAXVALUE));//Math.abs()取绝对值
try{
System.out.println("压入元素:");
for(int i=0;i<length;i++){
int j =  Math.abs(r.nextInt(MAXVALUE));
System.out.print(" "+j);
stack.push(j);
}
}catch(Exception e){System.out.println(e.toString());}
showStackData(stack);
}

/**
* 显示
* @param stack
*/
private void showStackData(MStack<Integer> stack){

System.out.println("");
System.out.println("栈长:"+stack.StackLength());

System.out.println("栈内元素为(出栈顺序):");

int length = stack.StackLength();
for(int i=0;i<length;i++){
System.out.print(" "+stack.Pop());
}
}
}


四、测试结果

压入元素:

13 10 3 3 9 7 3 12 4 10 10java.lang.RuntimeException: 超出栈上线

栈长:10

栈内元素为(出栈顺序):

10 4 12 3 7 9 3 3 10 13

top来指示栈顶元素在数组中的位置,top初始值为-1,表示栈为空,top=0表示已经有一个元素

(top==MAXSIZE-1)为栈满标志
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: