stack模板的實現

2021-08-19 19:46:55 字數 2892 閱讀 4537

1)stack的通用模板類的定義(模板屬於c++多型的一部分,此外還有函式的過載,類的繼承,虛函式等等)

//這個檔案的名稱stack.h
#ifndef

stack_h

#define

stack_h

template

valuename>

class

stack

const

stack

&operator=(const

stack

&rhs)

};
#include

"stack.cpp"

#endif

//stack_h

2)stack的指標陣列實現方法

為這個的檔名
#ifdef

stack_h

#include

"util.h"

//#include

"stack.h"

const

intinital_size=

9;

template

valuename>

stack::stack()
template

valuename>

stack::~stack()
template

valuename>

void

stack::expandcapacity()

template

valuename>

int

stack::size()

template

valuename>

void

stack::push(valuenamev)

template

valuename>

valuenamestack::pop()
template

valuename>

valuenamestack::peek()
template

valuename>

void

stack::clear()

#endif
3)stack的鍊錶的實現方法

//另外一種實現辦法,檔名為stack.cpp,這個和上乙個stack.cpp不可以一起用
//#include

"stacklist.h"

#ifdef

stacklist_h

#include

template

valuename>

stacklist::stacklist()
template

valuename>

stacklist::~stacklist()
template

valuename>

void

stacklist::push(valuenamev)

else

stack->link=tem;
stack=it;
}
count++;
}
template

valuename>

valuenamestacklist::pop()

else

valuenameresult=stack->link->v;
free(stack->link);
stack->link=null;
stack=it;
count--;

return

result;

}
}
template

valuename>

void

stacklist::clear()

free(stack);
stack=null;
count=

0;

}
template

valuename>

valuenamestacklist::peek()
template

valuename>

int

stacklist::size()

template

valuename>

bool

stacklist::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...