/*****************************************************copyright (C), 2014-2015, Lighting Studio. Co., Ltd. File name:Author:Jerey_Jobs Version:0.1 Date: Description:Funcion List: *****************************************************/#include <stdio.h>#include <stdlib.h>#define Max 10struct stack{int stack_text[Max];int top;//數組元素(棧元素)下標};typedef struct stack Stack;enum return_result{PUSH_ok,PUSH_no,FULL_ok,FULL_no,EMPTY_ok,EMPTY_no};void is_malloc_ok(Stack *stack)//是否分配成功{if(stack == NULL){printf("malloc error!\n");exit(-1);//結束進程}}void creat_stack(Stack **stack)//分配空間{(*stack) = (Stack*)malloc(sizeof(Stack));//分配空間 is_malloc_ok(*stack);}void init_stack(Stack *stack)//初始化{stack->top = -1; //top賦值為-1,位置在棧頂}int is_full(Stack *stack)//判斷棧是否滿{if(stack->top == Max)return FULL_ok;elsereturn FULL_no;}int push_stack(Stack *stack,int num)//入棧操作{if(is_full(stack) == FULL_ok)//棧滿{printf("the stack is full!\n");return PUSH_no;} //棧未滿stack->top++; //top為-1 執行完top為0stack->stack_text[stack->top] = num; //值寫入return PUSH_ok;}int is_empty(Stack* stack)//判斷棧是否為空白{if(stack->top == -1){return EMPTY_ok;}return EMPTY_no;}int pop_stack(Stack *stack)//出棧操作{if(is_empty(stack) == EMPTY_ok)//棧已空{ printf("stack is empty\n"); return EMPTY_ok;}else //棧不空 棧內有內容return EMPTY_no;}int main(){ Stack* stack;int i;creat_stack(&stack);//建立棧init_stack(stack);//棧初始化for(i = 0;i < Max;i++)//入棧次數{if(push_stack(stack,i + 1) == PUSH_ok)//入棧printf("入棧成功!\n"); elseprintf("入棧失敗!\n");}for(i = 0;i < Max;i++)//出棧次數{if(pop_stack(stack) == EMPTY_no)//出棧判斷棧是否為空白{printf("num = %d\n",stack->stack_text[stack->top]);stack->top--;//前移 }else{printf("棧空!\n");}} return 0;}