首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言靜態數組實現棧:最簡模型、邊界檢查、完整封裝

     編輯:關於C語言

靜態數組棧:教學與嵌入式首選

棧是「先進後出」(LIFO)結構,靜態數組實現最直觀:一個數組存數據,一個 top 索引指向棧頂。適合最大容量可預估、極度追求速度、無動態分配環境(如單片機)的場景。

核心數據結構

#define STACK_SIZE 50
static int stack[STACK_SIZE];
static int top_element = -1;   // -1 代表空棧

六大基本操作

1. 判空 isEmpty

int isEmpty() { return top_element == -1; }

2. 判滿 isFull

int isFull() { return top_element == STACK_SIZE - 1; }

3. 壓入 push

void push(int value) {
    if (!isFull()) stack[++top_element] = value;
    else printf("棧滿,壓入失敗\n");
}

4. 彈出 pop

void pop() {
    if (!isEmpty()) top_element--;
    else printf("棧空,彈出失敗\n");
}

5. 取棧頂 top(不修改結構)

int top() {
    if (!isEmpty()) return stack[top_element];
    return -32768;              // 約定錯誤值
}

6. 列印 printStack(從頂向下)

void printStack() {
    printf("靜態數組棧內容:");
    if (top_element == -1) { printf("空棧\n"); return; }
    for (int i = top_element; i >= 0; i--) printf("%d ", stack[i]);
    printf("\n");
}

測試主程序

int main() {
    push(4); push(6); push(1); push(9); push(2); push(8);
    printStack();               // 8 2 9 1 6 4

    pop(); pop(); pop(); pop(); // 彈出 4 個
    printf("經過 pop 後:"); printStack(); // 6 4

    printf("棧頂元素: %d\n", top());       // 6
    return 0;
}

關鍵細節對比:pop vs top

操作修改 top_element返回值用途
pop是 (--)無移除棧頂
top否棧頂值只讀檢查

擴容痛點與替代方案

  • 靜態數組無法擴容:編譯期固定 STACK_SIZE,溢出只能報錯。
  • 需動態容量 → 改用 realloc 動態數組或單鏈表(見前文)。
  • 多棧共享大數組 → 「多棧共享空間」技巧,但實現複雜。

完整代碼獲取

GitHub:Stack_StaticArray,含 Makefile 可直接 make run。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved