這種塊鏈棧在容量可以動態拓展的同時,節省了大量的new操作和delete操作,從而提高了效率.
template
<
typename t,
int patchsize=
128>
//預設模板引數.
class
patchstack
//不需要初始化matters.//注意一點:這不是一般的雙向鍊錶結構,而是這種棧專屬的操作受限鍊錶.};
patch*
const baseptr;
//動態生成的頭節點.一初始化就有了,不可更改.
patch* topptr;
int topcursor;
//游標;待填充的位置.
static
void
vrtpop
(patch*
& vtopptr,
int& vtopcursor)
--vtopcursor;
}public
:void
clean
(void
)void
clear
(void
)patchstack
(void):
baseptr
(new
patch
(nullptr))
,topcursor(0
)~patchstack
(void
)operator
bool()
//一開始居然是這裡有一處bug...(邏輯反了.)
void
push
(const t& matter)
topptr = topptr-
>nextptr;
topcursor =0;
} topptr-
>matters[topcursor++
]= matter;
}//不負責檢查正確性.
//錯誤呼叫會簡單地引發段錯誤(訪問nullptr),這是乙個非常良好的設計.
const t&
topcref
(void
)const
t&topref
(void
)void
wpop
(void
)void
pop(t& matter)
t pop
(void)}
;
用指標實現鏈棧的方法
在演算法中要用到多個棧時,最好用鍊錶作為棧的儲存結構,即用指標來實現。include include 定義節點的結構體 typedef struct snode slink typedef struct snode stacknode 定義棧的結構體 typedef struct istack st...
鏈棧的實現
解釋 由於鍊錶有頭指標,而棧也必須有頭指標,所有合二為一 鏈棧為空的條件為頭指標為空,頭指標儲存在乙個新的結構體中。儲存空間初始分配量 typedef int selemtype typedef int status typedef struct stacknode stacknode,linkst...
鏈棧的實現
typedef int elemtype typedef struct stacknodestacknode,linkstack 鏈棧的實現是先定義乙個結點指標,使其為null。這個作為判斷是否空棧的標誌。鏈棧的空棧借助乙個空指標,只要棧頂指標指向這個空指標就說明是空棧。鏈棧的實現是申請一塊空間,將...