棧的簡單實現(二)

2021-06-14 20:49:19 字數 3400 閱讀 1500

上文棧的簡單實現(一)實現了不能擴充套件棧容量的順序棧結構,這次給棧加上擴容功能,這樣就不用擔心出現滿棧的情況了。

不過由於本人技術水平不夠,也還在學習當中,因此只能固定擴大大小,而不是根據實際情況進行最合適的擴大。

跟上文**差不多,只是新增了乙個擴容的方法,以及改變了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...