
堆疊的定義和特點
定義
堆疊(stack)是限定只在表尾插入和洗掉操作的線性表
- 允許插入和洗掉的一端稱為堆疊頂(top),另一端稱為堆疊底(bottom)
- 不含任何資料元素的堆疊稱為空堆疊
特點
- 先進后出
- 后進先出
注意
- 堆疊又被稱為后進先出(Last In First Out)的線性表,簡稱LIFO結構
- 堆疊的插入操作,稱為進堆疊,也叫壓堆疊,入堆疊(push)
- 堆疊的洗掉操作,稱為出堆疊,也叫做彈堆疊(pop)
堆疊的初始化
定義堆疊的順序存盤順序
typedef struct { int id; char* name; }ElementType; typedef struct SeqStack { ElementType elements[MAX_SIZE]; //順序堆疊中用來存放資料元素的陣列 int top; //堆疊頂(陣列中的下標),如果為-1則表明堆疊為空 int length; //當前堆疊元素的個數 };
初始化堆疊
void InitSeqStack(SeqStack* seqstack) { seqstack->top = -1; //堆疊指向-1的下標 seqstack->length = 0; }
入堆疊和出堆疊
入堆疊
//向堆疊中壓入元素,回傳壓入的結果(true / false) int pushStack(SeqStack* seqstack, ElementType element) { if (seqstack->top = MAX_SIZE - 1) { printf("滿堆疊,壓堆疊失敗!"); return false; } seqstack->top++; //堆疊頂指標+1,以便加入新的元素 //將新插入的元素賦值給堆疊頂 seqstack->elements[seqstack->top] = element; seqstack->length++; return true; }
出堆疊
//以指標方式回傳出堆疊的元素,回傳值為出堆疊的結果(true / false) int PopSeqStack(SeqStack* seqstack, ElementType* element) { if (seqstack->top == -1) { printf("出堆疊失敗!"); return false; } //回傳堆疊頂指向的元素 *element = seqstack->elements[seqstack->top]; seqstack->top--; seqstack->length--; return true; }
清空堆疊
void ClearSeqStack(SeqStack* seqstack) { seqstack->top = -1; seqstack->length = 0; }


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401639.html
標籤:其他






