棧 - 陣列C語言
阿新 • • 發佈:2020-08-26
// 順序棧 #include <stdlib.h> #include <stdio.h> #define STATUS_TRUE 1 #define STATUS_FALSE 0 #define MAXSIZE 100 typedef int SElemType; /* * ADT - 棧的基本抽象資料型別: * InitStack(*S) * DestroyStack(*S) * ClearStack(*S) * StackEmpty(S) * StackFull(S) * Top(*S) * Push(*S) * Pop(*S) * StackLength(S) */ // 順序棧基本資料結構 typedef struct { SElemType data[MAXSIZE]; int top; }Stack; /* 構造一個空棧S */ void Initial(Stack* stack) { stack->top = -1; } void Destroy(Stack* stack) {} /* 把S置為空棧 */ void Clear(Stack* stack) { stack->top = -1; } /* 空棧判定 */ int Empty(Stack stack) { return stack.top == -1; } /* 滿棧判定 */ int Full(Stack stack) { return stack.top == MAXSIZE - 1; } /* 棧長 */ int Length(Stack stack) { //printf("stack length:%d\n", stack.top + 1); return stack.top + 1; // 注意:stack.top + 1與stack.top++在這裡大有區別 } /* 入棧 */ int Push(Stack *stack, SElemType e) { if (Full(*stack)) { return 0; } else { stack->data[++stack->top] = e; return 1; } } /* 出棧 */ int Pop(Stack* stack, SElemType *e) { if (Empty(*stack)) { return 0; } else { *e = stack->data[stack->top--]; return 1; } } /* 獲取棧頂元素 */ int Top(Stack* stack, SElemType* e) { if (Empty(*stack)) { return 0; } else { *e = stack->data[stack->top]; return 1; } } void Traverse(Stack stack) { for (int i = 0; i < Length(stack); i++) { printf("stack element %d value:%d\n", i, stack.data[i]); } } int main() { Stack stack; SElemType e; Initial(&stack); Push(&stack, 1); Push(&stack, 2); Push(&stack, 3); Push(&stack, 4); Push(&stack, 5); Traverse(stack); printf("=======================\n"); Pop(&stack, &e); Traverse(stack); printf("Pop up elemnt:%d\n", e); printf("=======================\n"); Top(&stack, &e); Traverse(stack); printf("Get top elemnt:%d\n", e); }