主要的功能是實現乙個後進先出的列表,有入棧、出棧、返回大小、判空等基本功能
#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...