採用鏈式儲存的棧成為鏈式棧(或簡稱鏈棧), 鏈棧的優點是便於多個棧共享儲存空間和提高其效率, 且不存在棧滿上溢的情況(因為鏈棧是靠指標鏈結到一起,只要記憶體夠大, 則鏈棧理論上可以儲存的元素是沒有上限的);
與順序棧相比, 由於順序棧是採用的陣列實現, 因此一旦陣列填滿, 則必須重新申請記憶體, 並將所有元素」搬家」, 而鏈棧則省略了這一」耗時耗力」的工作, 但卻需要付出附加乙個指標的代價;
鏈棧通常採用單鏈表實現, 並規定所有的操作都必須實在單鏈表的表頭進行, 而且w我們的鏈棧沒有頭結點, m_top直接指向棧頂元素;
鏈式棧的圖示如下:
鏈棧節點構造:
template
class chainnode
type data;
chainnode *next;
};鏈棧設計:
template
class linkstack
~linkstack()
bool isempty() const
void pop() throw(std::out_of_range);
const type &top() const throw(std::out_of_range);
void push(const type &data);
void makeempty();
private:
chainnode *m_top;
};棧的三大操作:
template
const type &linkstack::top() const
throw (std::out_of_range)
template
void linkstack::pop()
throw (std::out_of_range)
template
void linkstack::push(const type &data)
清空整個棧:
template
void linkstack::makeempty()
}輸出棧內所有內容:
template
ostream &operator< &stack)
return os;
}測試**:
int main()
cout << test << endl;
cout << "top = " << test.top() << endl;
test.pop();
cout << "top = " << test.top() << endl;
test.push(1);
cout << "top = " << test.top() << endl;
while (!test.isempty())
cout << test << endl;
test.push(11);
test.push(22);
test.push(33);
cout << test << endl;
test.makeempty();
trycatch (const std::exception &e)
return 0;
}
1 3 資料結構基礎概念
資料結構 資料 所有能被輸入到計算機中,且被計算機處理的符號的集合。資料元素 是資料的基本單元,由若干個資料項組成,也成為結點。資料項 是資料不可分割的最小單元,有時也成域 字段 資料物件 是指相同性質資料元素構成的集合。資料結構 是互相之間存在一種或多種關係的資料元素的集合。資料元素之間的關係,稱...
資料結構1 3 燈塔
我自己用的merge排序,只有50通過。待我優化一下。include using namespace std define maxlength 4000000 typedef long long rank class node class nodelist nodelist rank inverti...
資料結構 day 13
佇列 陣列模擬佇列 一般操作 include using namespace std const int n 100010 在隊尾插入元素,在隊頭彈出元素 int q n hh,tt 1 插入 q tt x 彈出 hh 判斷佇列是否為空 if hh tt not empty else empty 取...