這里是閑話:計算機小白第一次嘗試發布自己的文章,思考后覺得從堆疊這個資料結構開始最合適了,以下是堆疊最簡單的功能實作,包括堆疊的初始化、判斷堆疊滿堆疊空、壓堆疊彈堆疊等功能,僅供參考噢~
一、 堆疊的結構體:
這里實作的堆疊為最基礎的順序堆疊,用陣列來存盤堆疊的元素,并定義堆疊頂top和堆疊底base
typedef struct {
SElemType elem[STACK_INIT_SIZE];
int top, base;
}SqStack;
二、 堆疊資料結構的基本操作:
1. 初始化堆疊:讓堆疊頂下標top等于堆疊底下標base,使兩者同時為零
Status InitStack(SqStack& s) {
s.top = s.base = 0;
return OK;
}
2. 判斷是否堆疊滿:若堆疊頂下標top等于堆疊的存盤空間數,則判斷為堆疊滿
bool StackFull(SqStack s) {
return s.top == STACK_INIT_SIZE;
}
3. 判斷是否堆疊空:若堆疊頂等于堆疊底,則判斷為堆疊空
bool StackEmpty(SqStack s) {
return s.top == s.base;
}
4. 壓堆疊:首先判斷堆疊是否滿,若堆疊未滿,將被插入元素賦值給top指向的元素,最后top加一,
Status Push(SqStack& s, SElemType e) {
if (StackFull(s)) {
cout << "堆疊滿," << endl;
return ERROR;
}
s.elem[s.top++] = e;
return OK;
}
5. 彈堆疊:即洗掉堆疊頂元素,先存盤堆疊頂元素,再將堆疊頂下標top減一,
//洗掉堆疊頂元素,并用e回傳其值,復雜度為O(1)
Status Pop(SqStack& s, SElemType& e) {
GetTop(s,e);
s.top--;
return OK;
}
6. 回傳堆疊長:top即為堆疊長,
//回傳堆疊長,復雜度為O(1)
int StackLength(SqStack s) {
return s.top;
}
7. 回傳堆疊頂元素的值:首先判斷是否堆疊空,若堆疊非空,則存盤top指向的元素,最后讓top減一,
//用e回傳堆疊頂元素的值,復雜度為O(1)
Status GetTop(SqStack s, SElemType& e) {
if (StackEmpty(s)) {
cout << "堆疊空," << endl;
return ERROR;
}
e = s.elem[s.top - 1];
return OK;
}
8. 置為空堆疊:將堆疊底下標base賦值給堆疊頂下標top,
//置為空堆疊,復雜度為O(1)
Status ClearStack(SqStack& s) {
s.top = s.base;
return OK;
}
9. 多載輸出堆疊:首先判斷堆疊是否非空,若堆疊非空,依次輸出堆疊中每個元素,
//多載輸出堆疊,復雜度為0(n)
ostream& operator<<(ostream& out, SqStack s) {
if (StackEmpty(s)) {
out << "堆疊空," << endl;
return out;
}
out << "(";
for (int i = 0; i < s.top; i++)
out << s.elem[i] << ",";
out << "\b)";
return out;
}
10. 運行結果及檢驗:
①檢驗問題:檢驗的基本操作如下
- 將6,5,4,3,2,1先后入堆疊,輸出堆疊;
- 彈堆疊;
- 回傳堆疊頂元素;
- 獲取堆疊長;
- 清空堆疊;
②理論結果:
- S1 : (6, 5, 4, 3, 2, 1);
- 洗掉后S1 : (6, 5, 4, 3, 2), 洗掉元素為: 1;
- 堆疊頂元素為: 2;
- S1堆疊長為: 5;
- 堆疊空,
③實際結果:

經檢驗,實驗結果符合理論,
關于堆疊的基本操作就到此結束啦!下一篇文章是堆疊的應用,包括數值轉換、括號匹配、行編輯程式、迷宮求解、運算式求值,有興趣的小伙伴可以繼續瀏覽噢~
這里是鏈接:https://blog.csdn.net/jokerCe/article/details/114141469
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264151.html
標籤:其他
上一篇:5G NGC — 關鍵技術 — 網路切片 — 底層技術支撐
下一篇:計算機組成原理(6)指令系統
