每天一個數據結構-----棧的順序儲存實現
阿新 • • 發佈:2018-12-20
#include <stdio.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 10 typedef int Status; typedef int SelemType; typedef struct { SelemType data[MAXSIZE]; int top; } StackList; //初始化棧 Status InitStack(StackList *stack) { stack->top = -1; return OK; } //判斷棧stack是否為空棧 Status StackEmpty(StackList stack) { if (stack.top == -1) return TRUE; else return FALSE; } //將SelemType:e 做入棧操作 //初始化條件:棧stack非滿 Status Push(StackList *stack,SelemType e) { if (stack->top >= MAXSIZE-1) return ERROR; stack->top++; stack->data[stack->top] = e; return OK; } //出棧 Status Pop(StackList *stack,SelemType *e) { if (stack->top == -1) return FALSE; *e = stack->data[stack->top]; stack->top--; return OK; } //獲取棧stack的元素個數 int StackLength(StackList stack) { return stack.top+1; } // 把S置為空棧 Status ClearStack(StackList *stack) { stack->top=-1; return OK; } Status visit (SelemType e){ printf("%d\n",e); return OK; } //從棧底到棧頂遍歷每一個元素 Status StackTraver (StackList *stack,SelemType *e) { int i; if (stack->top == -1) return ERROR; for (i=0;i<=stack->top;i++) { visit(stack->data[i]); } return OK; } int main() { StackList stack; int i; SelemType e ; printf("初始化棧stack...:\n"); InitStack(&stack); if (StackEmpty(stack)) printf("棧stack是空棧...\n"); printf("順序將0,100,200,···500做入棧操作...\n"); for (i = 0;i<6;i++) Push(&stack,i*100); printf("做入棧操作後棧stack長度:%d\n",StackLength(stack)); printf("棧stack各元素為:\n"); StackTraver(&stack, &e); printf("將棧頂元素做出棧操作...\n"); Pop(&stack, &e); printf("棧頂元素:%d已經出棧\n",e); printf("棧頂元素出棧之後:棧stack長度:%d\n",StackLength(stack)); printf("清空stack棧\n"); ClearStack(&stack); return 0; }