實驗目的:
1. 熟練掌握棧的鏈式儲存結構的實現;
2. 熟練掌握鏈棧的基本操作演算法實現,包括建棧、入棧、出棧、讀棧頂元素和釋放棧等;
3. 靈活使用棧來解決具體的問題;
實驗內容:
1.定義鏈棧類,封裝鏈棧的基本操作演算法;(建議將鏈棧的類模板及實現演算法單獨寫入.h標頭檔案中)
2.利用鏈棧的基本操作與特性,完成十進位制數字到
二、八、十六進製制數的轉換。
實現**:
1.基本操作
#include
using namespace std;
template
struct node;
template
class linkstack
~linkstack();
void push(datatype x);//入棧
datatype pop();//出棧
datatype gettop()//獲得棧頂元素
int empty()//判斷棧空
void print();//列印棧中元素
private:
node *top;
};template
linkstack::~linkstack()
}template
void linkstack::push(datatype x)
template
datatype linkstack::pop()
template
void linkstack::print()
coutnode top;
public:
line()
~line()
}void push(int i);//入棧;
int pop();//出棧;
int getpop();
int empty()
else return 0;
}void cz(int n);
};void line::push(int i)
int line::pop()
int line::getpop()
}void line::cz(int n)
cout << 「將十進位制數轉換為2進製數:」;
while (top != null)
}void line::az(int n)
cout << 「將十進位制數轉換為8進製數:」;
while (top != null)
}void line::bz(int n)
cout << 「將十進位制數轉換為16進製制數:」;
while (top != null)
}int main()
k.push(n);
cout << 「棧頂元素為:」;
cout << k.getpop() << endl;}}
測試結果:
1.鏈棧的基本操作實現結果
2.進製轉換
二進位制八進位制
十六進製制
遇到的問題及解決方法:
鏈棧的演算法問題,鏈棧的儲存方式是動態的,清楚沒有棧滿的問題,只有當記憶體沒有可用空間時才會出現棧滿,但是每個元素都需要乙個指標域,從而產生了結構性開銷。鏈棧的思想和建立乙個帶頭指標的鏈式線性表的思想非常相似,頭指標指向棧頂指標。
用棧實現十進位製到其他進製的轉換,此處最大進製設為十六進製制,可以自行拓展。主要方法:除商倒數取餘。利用鏈棧的入棧和出棧等基礎操作和特性完成進製轉換後的輸出。
鏈棧的例項應用
利用棧的基本操作實現將任意乙個十進位制整數轉化為r進製整數演算法 r為二至九之間 由計算機基礎知識可知,把乙個十進位制整數x轉換為任一種r進製數得到的是乙個r進製的整數,假定為y,轉換方法是逐次除基數r取餘法。具體做法是 首先用十進位制整數x除以基數r,得到的整餘數是r進製數y的最低位y0,接著以x...
棧(普通棧及鏈棧)
palist t來表示當前的資料下標,即可以模擬先進後出的特性 棧資料結構體 最大值,指示當前棧中數的個數t,所存資料型別的指標s struct seqstack 基本操作壓棧 void push seq pseqlist pastack,datatype x void pop seq pseqli...
Z Stack協議棧中LED的定義及應用
tocz stack協議棧中led的定義及應用 z stack協議棧裡面有三個led燈的定義。具體如下 1 green led1 p1 0 2 red led2 p1 1 3 yellow led3 p1 4 被設定為裝置網路狀態指示燈,未接入網路不亮,接入網路常亮,突然斷網會閃爍一段時間再熄滅 l...