DS:順序棧
阿新 • • 發佈:2021-06-29
#ifndef _SEQSTACK_H #define _SEQSTACK_H #define MAXSIZE 1024 #define INFINITY 65535 typedef struct { int data[MAXSIZE]; // 在結構中定義一個數組 int top; // 指示棧頂元素,在陣列中相當於索引 }SeqStack; void InitStack(SeqStack* stack); int IsEmpty(SeqStack* stack); int SeqStack_Top(SeqStack* stack); // 返回棧頂元素 int SeqStack_Pop(SeqStack* stack); // 出棧(彈出棧頂元素) void SeqStack_Push(SeqStack* stack, int val); // 將元素val壓入棧中 void SeqStack_Destory(SeqStack* stack); // 銷燬棧 #endif // !_SEQSTACK_H
#include "seqstack.h" void InitStack(SeqStack* stack) { stack->top = -1; } int IsEmpty(SeqStack* stack) { if (stack->top == -1) return 1; return 0; } int SeqStack_Top(SeqStack* stack) { if (!IsEmpty(stack)) return stack->data[stack->top]; return INFINITY; } int SeqStack_Pop(SeqStack* stack) { if (!IsEmpty(stack)) return stack->data[stack->top--]; return INFINITY; } void SeqStack_Push(SeqStack* stack, int val) { if (stack->top >= MAXSIZE - 1) // stack full return; stack->top++; stack->data[stack->top] = val; } void SeqStack_Destory(SeqStack* stack) { if (!IsEmpty(stack)) stack = 0; //free(stack); //這是我註釋掉的,它之前並沒有malloc(),為何要free()掉?【我寫的stack=0】 }
#include<stdio.h> #include<stdlib.h> #include"seqstack.h" int main() { srand((unsigned)time(0)); SeqStack stack; InitStack(&stack); for (int i = 0; i < 50; i++) { SeqStack_Push(&stack, rand() % 1000); } printf("棧頂元素:%d\n", SeqStack_Top(&stack)); printf("棧中元素:"); for (int i = 0; i < 50; i++) { if (i % 5 == 0) // 每5個元素一行輸出 printf("\n"); printf("%d ", SeqStack_Pop(&stack)); } printf("\n"); return 0; }