上文棧的簡單實現(一)實現了不能擴充套件棧容量的順序棧結構,這次給棧加上擴容功能,這樣就不用擔心出現滿棧的情況了。
不過由於本人技術水平不夠,也還在學習當中,因此只能固定擴大大小,而不是根據實際情況進行最合適的擴大。
跟上文**差不多,只是新增了乙個擴容的方法,以及改變了push方法。
新增**如下:
/**
* 擴大棧的容量
*/private void expanedlist()
修改**如下:
/**
* 入棧操作
* * @param stack
* 棧的物件引用
* @param edata
* 要壓入棧的資料
*/void push(stack2stack, e edata)
stack.objdata[++stack.ntop] = edata;
system.out.println(stack.objdata[stack.ntop] + "已入棧");
}
完整**如下:
package ds.stack;
/** * 簡單可變長棧
* * @author abyss_cmg
* * @param */
public class stack2
/*** 例項化棧結構
* * @param ninitsize
* 棧的最大長度
*/stack2(int ninitsize) else
} /**
* 獲取棧中已存放資料的長度
* * @param stack
* 棧的物件引用
* @return 獲取棧中已存放資料的長度
*/int getsize(stack2stack)
/*** 獲取棧的最大長度
* * @param stack
* 棧的物件引用
* @return 棧的最大長度(初始化時的長度)
*/int getmaxsize(stack2stack)
/*** 判斷是否滿棧
* * @param stack
* 例項化的物件引用
* @return 若滿棧則返回true,否則返回false
*/boolean isfull(stack2stack)
/*** 判斷是否空棧
* * @param stack
* 棧的物件引用
* @return 若空棧則返回true,否則返回false
*/boolean isempty(stack2stack)
/*** 清空棧,但不釋放記憶體
* * @param stack
* 棧的物件引用
*/void clear(stack2stack)
} /**
* 釋放棧的記憶體空間
* * @param stack
* 棧的物件引用
*/void free(stack2stack)
} /**
* 擴大棧的容量
*/private void expanedlist()
/*** 入棧操作
* * @param stack
* 棧的物件引用
* @param edata
* 要壓入棧的資料
*/void push(stack2stack, e edata)
stack.objdata[++stack.ntop] = edata;
system.out.println(stack.objdata[stack.ntop] + "已入棧");
} /**
* 將棧頂彈出
* * @param stack
* 棧的物件引用
* @return 彈出棧頂資料
*/@suppresswarnings("unchecked")
e pop(stack2stack)
system.out.println(stack.objdata[stack.ntop] + "已出棧");
return (e) stack.objdata[stack.ntop--];
} /**
* 讀取棧頂資料(不彈出)
* * @param stack
* 棧的物件引用
* @return 返回棧頂元素
*/@suppresswarnings("unchecked")
e peek(stack2stack)
system.out.println(stack.objdata[stack.ntop] + "已讀取");
return (e) stack.objdata[stack.ntop];
}}
測試**:
package ds.stack;
public class ******2
system.out.println("棧的現有長度:" + stack.getsize(stack));
system.out.println("棧的最大長度:" + stack.getmaxsize(stack));
system.out.println("----測試清空棧操作----");
stack.free(stack);
system.out.println("棧的現有長度:" + stack.getsize(stack));
system.out.println("棧的最大長度:" + stack.getmaxsize(stack));
}}
測試結果:
----新建空棧----
棧的最大長度:5
棧的現有長度:0
----測試入棧操作----
將test1壓入棧
test1已入棧
將test2壓入棧
test2已入棧
將test3壓入棧
test3已入棧
將test4壓入棧
test4已入棧
將test5壓入棧
test5已入棧
將test6壓入棧
test6已入棧
棧的現有長度:6
棧的最大長度:15
----測試清空棧操作----
棧的現有長度:0
棧的最大長度:15
棧的簡單實現
設棧採用順序儲存結構 用動態陣列 請編寫棧的各種基本操作的實現函式 棧的動態陣列順序儲存結構可定義如下 struct stack 棧的基本操作可包括 void initstack stack s 構造乙個空棧 s int emptystack stack s 若棧s 為空棧返回 1,否則返回0 vo...
棧的簡單實現
棧的描述 線性結構,有序列表,先進後出 陣列實現棧 思路 記錄一下棧頂元素的索引,加入新元素時索引 索引位置對應的值設為新元素,直到棧滿,取出元素後,索引 直到小於0,棧空 鍊錶實現棧 public class arraystack 棧滿 return public boolean isfull 是...
棧的簡單實現(順序棧 鏈棧)
include define maxsize 100 define true 1 define false 0 define ok 1 define error 0 define infeasible 1 define overflow 2 using namespace std typedef i...