C++实现链栈的基本操作
之前對順序棧寫了基本操作,認為有必要也動手練練棧的鏈表實現(xiàn)。
對于鏈棧,一般不會出現(xiàn)棧滿的情況。
鏈棧頭文件定義例如以下:
#ifndef CSTOCK_H_ #define CSTOCK_H_typedef int elemType;struct Item {elemType data;Item * p_next; }; class CStock { public:CStock();CStock(const CStock & otherStock); //拷貝構造函數(shù);CStock & operator = (const CStock & otherStock); //=運算符重載。void push(elemType x);//進棧操作;bool pop(elemType &x); //出棧操作;bool isEmpty() const; //推斷棧空;void clear();//清空棧。使棧為空;int size() const; //獲得棧的大小。void print() const; //打印棧內元素;~CStock();public:Item *p_Top;//棧頂 };#endif我寫的這種方法認為不好,有好的寫法希望大神能指導指導。 CStock & CStock::operator =(const CStock & otherStock) { CStock tempStock; Item * copyElement = otherStock.p_Top; //將棧otherStock的元素出棧,依次進入tempStock內,元素的位置順序和otherStock相反; while(copyElement) { tempStock.push(copyElement->data); copyElement = copyElement->p_next; } copyElement = tempStock.p_Top; //將tempStock的元素出棧,依次進入此棧內,元素位置和otherStock同樣。 while(copyElement) { push(copyElement->data); copyElement = copyElement->p_next; } return *this; } //進棧操作 void CStock::push(elemType x) { Item * pushElement = new Item; pushElement->data = x; if(!p_Top)//假設棧為空時 { p_Top = pushElement; pushElement->p_next = NULL; } else //若棧不為空時 { pushElement->p_next = p_Top; p_Top = pushElement; } } //出棧操作,若棧不為空。數(shù)據(jù)有形參x帶至主調函數(shù),出棧失敗函數(shù)返回false; bool CStock::pop(elemType &x) { if(!p_Top) { return false; } x = p_Top->data; p_Top = p_Top->p_next; return true; } //推斷棧是否為空 bool CStock::isEmpty() const { return p_Top == NULL; } //清空棧,使棧置為空棧 void CStock::clear() { Item * deleteElement; while(p_Top) { deleteElement = p_Top; p_Top = p_Top->p_next; delete deleteElement; } } //獲得棧的大小 int CStock::size() const { int length = 0; Item *temp = p_Top; while(temp && ++length) { temp = temp->p_next; } return length; } //打印棧內元素 void CStock::print() const { int count = 0; Item * temp = p_Top; while(temp && ++count) { cout << temp->data << "\t"; if(count % 5 == 0) cout << endl; temp = temp->p_next; } } //析構函數(shù),提供對指針成員的釋放,默認的會出現(xiàn)潛在問題 CStock::~CStock(void) { Item * deleteElement; while(p_Top) { deleteElement = p_Top; p_Top = p_Top->p_next; delete deleteElement; } }
轉載于:https://www.cnblogs.com/zfyouxi/p/5082125.html
總結
以上是生活随笔為你收集整理的C++实现链栈的基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GC基本算法及C++GC机制
- 下一篇: 谈谈JAVA工程狮面试中经常遇到的面试题