//這個檔案的名稱stack.h
#ifndefstack_h
#definestack_h
templatevaluename>
classstack
const
stack
&operator=(const
stack
&rhs)
};
#include"stack.cpp"
#endif2)stack的指標陣列實現方法//stack_h
為這個的檔名
#ifdefstack_h
#include"util.h"
//#include"stack.h"
constintinital_size=
9;
templatevaluename>
stack::stack()
templatevaluename>
stack::~stack()
templatevaluename>
voidstack::expandcapacity()
templatevaluename>
intstack::size()
templatevaluename>
voidstack::push(valuenamev)
templatevaluename>
valuenamestack::pop()
templatevaluename>
valuenamestack::peek()
templatevaluename>
voidstack::clear()
#endif3)stack的鍊錶的實現方法
//另外一種實現辦法,檔名為stack.cpp,這個和上乙個stack.cpp不可以一起用
//#include"stacklist.h"
#ifdefstacklist_h
#include
templatevaluename>
stacklist::stacklist()
templatevaluename>
stacklist::~stacklist()
templatevaluename>
voidstacklist::push(valuenamev)
else
stack->link=tem;
stack=it;
}
count++;
}
templatevaluename>
valuenamestacklist::pop()
else
valuenameresult=stack->link->v;
free(stack->link);
stack->link=null;
stack=it;
count--;
return
result;
}
}
templatevaluename>
voidstacklist::clear()
free(stack);
stack=null;
count=0;
}
templatevaluename>
valuenamestacklist::peek()
templatevaluename>
intstacklist::size()
templatevaluename>
boolstacklist::isempty()
#endif
通過這個模板類的實現,學習了很多東西。比如模板類的宣告和實現必須在同乙個檔案下面。雖然這裡表面上看起來是屬於不同檔案,其實是由於在stack.檔案中有#include stack.cpp,這個使得在預編譯的時候會是兩個檔案變成乙個。這個stack.cpp中加了乙個條件編譯是由於有些編譯器可能會提前編譯原始檔。鍊錶實現和指標陣列實現各自的優缺點不同,比如在使用指標陣列實現push和pop操作比較快,但是這個方法可能會有空間浪費。而鍊錶實現會使得pop和push的時間相對複雜度比較高o(n),但是不存在空閒的空間。
利用模板實現Stack
說起stack,可能很多人都寫過,但是這是我第一次寫,而且出錯率特別高 那麼首先看看什麼是stack 棧stack是乙個 先進後出 的容器 a 棧是只能在某一端插入和刪除的特殊線性表。b 先堆進來的壓在底下,隨後乙個乙個往上堆。取走時,只能從上面乙個乙個取。讀和取都在頂部進行,底部一般是不動的。c ...
C 棧 stack 的模板類實現
1.基本概念 棧中的元素遵守 先進後出 的原則 lifo,last in first out 只能在棧頂進行插入和刪除操作 壓棧 或推入 進棧 即push,將資料放入棧頂並將棧頂指標加一 出棧 或彈出 即pop,將資料從棧頂刪除並將棧頂指標減一 棧的基本操作有 pop,push,判斷空,獲取棧頂元素...
Stack與Queue的實現(c 模板實現)
include include using namespace std template 類模板 class stack void pop void push t temp int size int main void include include using namespace std temp...