日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++实现链栈的基本操作

發(fā)布時間:2023/12/2 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++实现链栈的基本操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

之前對順序棧寫了基本操作,認(rèn)為有必要也動手練練棧的鏈表實現(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); //拷貝構(gòu)造函數(shù);CStock & operator = (const CStock & otherStock); //=運算符重載。void push(elemType x);//進(jìn)棧操作;bool pop(elemType &x); //出棧操作;bool isEmpty() const; //推斷棧空;void clear();//清空棧。使棧為空;int size() const; //獲得棧的大小。void print() const; //打印棧內(nèi)元素;~CStock();public:Item *p_Top;//棧頂 };#endif


實現(xiàn)的基本功能例如以下:

#include "CStock.h" #include <iostream> using std::cout; using std::endl;CStock::CStock(): p_Top(NULL)//構(gòu)造函數(shù) {} //拷貝構(gòu)造函數(shù) 便于定義時初始化,如 CStock s1 = stock; 默認(rèn)的會出現(xiàn)潛在問題 CStock::CStock(const CStock & otherStock):p_Top(NULL) {*this = otherStock; } // =運算符重載,便于賦值,如:CStock s1; .... CStock s2; s2 = s1; 默認(rèn)的會出現(xiàn)潛在問題。

我寫的這種方法認(rèn)為不好,有好的寫法希望大神能指導(dǎo)指導(dǎo)。 CStock & CStock::operator =(const CStock & otherStock) { CStock tempStock; Item * copyElement = otherStock.p_Top; //將棧otherStock的元素出棧,依次進(jìn)入tempStock內(nèi),元素的位置順序和otherStock相反; while(copyElement) { tempStock.push(copyElement->data); copyElement = copyElement->p_next; } copyElement = tempStock.p_Top; //將tempStock的元素出棧,依次進(jìn)入此棧內(nèi),元素位置和otherStock同樣。 while(copyElement) { push(copyElement->data); copyElement = copyElement->p_next; } return *this; } //進(jìn)棧操作 void CStock::push(elemType x) { Item * pushElement = new Item; pushElement->data = x; if(!p_Top)//假設(shè)棧為空時 { p_Top = pushElement; pushElement->p_next = NULL; } else //若棧不為空時 { pushElement->p_next = p_Top; p_Top = pushElement; } } //出棧操作,若棧不為空。數(shù)據(jù)有形參x帶至主調(diào)函數(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; } //打印棧內(nèi)元素 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; } } //析構(gòu)函數(shù),提供對指針成員的釋放,默認(rèn)的會出現(xiàn)潛在問題 CStock::~CStock(void) { Item * deleteElement; while(p_Top) { deleteElement = p_Top; p_Top = p_Top->p_next; delete deleteElement; } }




轉(zhuǎn)載于:https://www.cnblogs.com/zfyouxi/p/5082125.html

總結(jié)

以上是生活随笔為你收集整理的C++实现链栈的基本操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。