使用鍊錶表示的棧結構模板類程式如下所示
#ifndef _h_mystack_list_h
#define _h_mystack_list_h
/巨集定義棧的臨界長度,超過此長度之後需要在利用率較低的情況下**空間
#define boundary_length 2048
#include
template
class mystack_list;
template
struct snode
;template
class mystack_list
;template
mystack_list::mystack_list(void)
template
mystack_list::mystack_list(const mystack_list& st)
else
p = p->next;
}}template
mystack_list::~mystack_list()
m_phead = null;
}template
void mystack_list::push(const t val)
template
t mystack_list::pop(void)/彈出棧頂元素(刪除棧頂元素,如果不存在,則throw異常)
struct snode* p = m_phead;
m_phead = m_phead->next;
t val = p->val;
delete p;
return val;
}template
int mystack_list::clear(void)清空,並且返回元素數目
m_phead = null;
return cnt;
}template
t mystack_list::top(void)///僅僅返回棧頂元素,為空則丟擲異常
template
int mystack_list::size(void)/計算元素的數目
return cnt;
}template
bool mystack_list::isempty(void)///指示棧是否為空
template
mystack_list& mystack_list::operator=(const mystack_list& st)
else
p = p->next;
}return(*this);
}#endif
使用到的測試程式如下所示(簡單測試了一下,可能不全面)
#include
#include "mystack_list.cpp"
void main(void)
int topval = 0;
mystack_listmst2(mst);
mystack_listmst3;
mst3 = mst2;
while (!mst.isempty())
std:
:cout<:
:endl;
while (!mst2.isempty())
std:
:cout<:
:endl;
while (!mst3.isempty())
std:
:cout<:
:endl;
std:
:system("pause");
}
說明一下,最近寫的比往常頻繁了,倒不是因為自己要奮發什麼的,只是最近看書看到需要練筆的地方,而且恰好自己能夠寫出來。 python資料結構之棧(stack)
目錄 棧的定義 棧的基本操作 小練習棧遵循後進先出 last in first out 現實生活中也有不少這樣的例子,比如在學校食堂吃完飯時,你把盤子放到桌子上,疊起來之後,阿姨過來拿盤子出去洗,假如是手洗,那肯定是先從最上面的盤子開始拿來洗的,而最上面的盤子是最後放上去的,卻是第乙個 被拿出來的,...
C 資料結構之Stack(棧)
stack,棧,是好比堆積木似的資料結構,從上之下堆積,取出時按 lifo last int first out後進先出的規則。棧一般為執行緒所獨有,也就是每個執行緒有其自有的棧,與heap堆一般為共有的不同 heap為程序所用,stack為執行緒所用?stack主要有四種操作 empty判斷棧是否...
資料結構 棧(Stack)
只允許在一端進行插入或刪除操作的線性表。首先,棧是一種線性表,但限定這種線性表只能在某一段進行插入和刪除操作。棧頂 top 線性表允許進行插入和刪除的一端。棧底 bottom 固定的,不允許進行插入和刪除的另一端。空棧 不含任何元素。如上圖 a1為棧底元素,an為棧頂元素。由於棧只能在棧頂進行插入和...