c語言萬能程式設計模板 C語言利用模板實現簡單的棧類

2021-10-17 01:27:09 字數 3632 閱讀 2613

主要的功能是實現乙個後進先出的列表,有入棧、出棧、返回大小、判空等基本功能

#pragma once

using namespace std;

const int maxsize = 0xfff;

template

class class_linkstack

int top;

type* my_s;

int max_size;

public:

class_linkstack() :top(-1), max_size(maxsize)

my_s = new type[max_size];

if (my_s == null)

cerr << "動態儲存分配失敗!" << endl;

exit(1);

class_linkstack(int size) :top(-1), max_size(size)

my_s = new type[size];

if (my_s == null)

cerr << "動態儲存分配失敗!" << endl;

exit(1);

~class_linkstack()

bool empty_linkstack();

void push_linkstack(type tp);

void pop_linkstack();

type top_linkstack();

int size_linkstack();

void print_linkstack();

template

void class_linkstack::print_linkstack()

if (top == -1)

cout << "空棧" << endl;

else

for (int i = 0; i < top+1; i++)

cout << my_s[i] << '\t';

template

bool class_linkstack::empty_linkstack()

if (top == -1)

return true;

else

return false;

template

void class_linkstack::push_linkstack(type tp)

if (top + 1 < max_size)

my_s[++top] = tp;

else

cout << "棧已滿" << endl;

exit(1);

template

void class_linkstack::pop_linkstack()

if (top == -1)

cout << "為空棧" << endl;

exit(1);

else

my_s[top--] = 0;

template

type class_linkstack::top_linkstack()

if (top != -1)

return my_s[top];

else

cout << "為空棧" << endl;

exit(1);

template

int class_linkstack::size_linkstack()

return top + 1;

測試**

#include "class_linkstack.h"

int main()

class_linkstack sk1(5);

for (int i = 0; i < 5;i++ )

sk1.push_linkstack(i * 2 + 1);

sk1.print_linkstack();

system("pause");

return 0;

補充(通過單鏈表實現)

上面是通過陣列來實現,與陣列相比,鍊錶實現更靈活,更容易增刪元素。

單鏈表實現的核心思想是不斷更新棧頂指標,來實現出棧壓棧,每乙個節點是乙個結構體,包含乙個value和乙個next指標指向下乙個元素,初始化時將棧頂指標置為null。

#pragma once

using namespace std;

template

struct listnode

type value;

listnode* next;

listnode(type v,listnode* p):value(v),next(p)

template

class list_stack

listnode* top;

int size = 0;

public:

list_stack();

void push(type &tp);

void pop();

bool empty();

int size();

void print();

~list_stack()

while (top)

listnode * p = top;

top = top->next;

delete p;

template

bool list_stack::empty()

if (top == null)

return true;

else

return false;

template

list_stack::list_stack()

top = null;

size = 0;

template

void list_stack::push(type &tp)

listnode *tmp=new listnode(tp,top);

top = tmp;

size++;

template

void list_stack::pop()

if (top == null)

cout << "為空棧" << endl;

else

top = top->next;

size--;

template

int list_stack::size()

return size;

template

void list_stack::print()

listnode* tmp = top;

while (tmp != null)

cout << tmp->value << '\t';

tmp = tmp->next;

簡單測試:

int main()

list_stack ls;

for (int i = 0; i < 5; i++)

ls.push(i);

ls.print();

ls.pop();

ls.pop();

cout << endl;

ls.print();

cout << endl;

cout << ls.size();

system("pause");

return 0;

C語言小筆記 萬能排序

include include include typedef struct stustu 函式功能 排序 萬能排序 形參列表 void base 資料起始位置 size t nmemb 資料的個數 size t size 每個元素的位元組大小 int compare const void cons...

c語言實現萬能求導

原理 如下圖,若要求曲線在a點的導數,則選取另一點b,求ab的斜率,b越靠近a,則斜率越接近要求的導數值 因此,可以設計原型如下 design a prototype double derivative point p,double accuracy 以下我給出乙份自寫的sample code,已經...

c語言萬能標頭檔案 C語言的設計模式

單一職責原則 通常的定義是只專注於做一件事和僅有乙個引起它變化的原因。對於介面 實現 函式級別往往我們比較容易關注單一職責,大家談的也比較多,但對於返回值 引數可能不會有太多的人關注。但往往就是這些不符合單一職責原則的設計可能導致一些很難發現的bug。看看下面這段 pbuf byte realloc...