C 鏈棧的定義及應用

2021-10-08 13:21:09 字數 1742 閱讀 5589

實驗目的:

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...