數據結構之棧
一:棧的定義
棧(stack)是限定在表尾進行插入和刪除的操作的線性表。
棧是先進者後出,後進者先出。
棧的操作:入棧,壓棧,進棧都表示向棧中添加數據。出棧,彈棧是從棧中刪除數據。
棧是一種“操作受限”的線性表。
二:java數組實現棧
棧主要的操作有:出棧和入棧。java可以使用數組和鏈表來實現棧的功能,使用數組實現的叫做順序棧,使用鏈表實現的叫做鏈式棧。
下面我使用java數組來實現一下棧效果。
/**
* 使用數組來實現棧的相關功能
*/
public class ArrayStack {
// 定義一個Object數組
public Object[] objs;
// 棧中存在的數量
public int count;
// 棧的大小
public int stackSize;
/**
* 初始化
*
* @param stackSize
*/
public ArrayStack(int stackSize) {
this.stackSize = stackSize;
this.objs = new Object[stackSize];
this.count = 0;
}
/**
* 入棧操作
*
* @param obj
*/
public boolean push(Object obj) {
// 如果棧中的數據已經滿了,需要擴容數組,擴容數組爲原來的2倍
if (count == stackSize) {
objs = Arrays.copyOf(objs, stackSize * 2);
objs[count] = obj;
count++;
stackSize = objs.length;
} else {
objs[count] = obj;
count++;
}
return true;
}
/**
* 出棧操作
*/
public Object pop() {
if (count == 0) {
return "";
} else {
Object obj = objs[count - 1];
count--;
return obj;
}
}
}
注意:使用數組實現棧時主要關注數組的擴容。