栈的线性表实现(顺序的栈)
1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef int datatype; 4 #define N 64 5 typedef struct stack 6 { 7 int data[N]; 8 int top; 9 }stack_list; 10 stack_list * create_stack(); 11 int stack_insert(stack_list * L,datatype value); 12 int stack_full(stack_list * L); 13 void stack_show(stack_list *L); 14 int stack_po(stack_list * L,datatype * value); 15 int stack_empty(stack_list *L ); 16 datatype stack_top(stack_list * L); 17 void stack_clear(stack_list * L); 18 void stack_free(stack_list * L); 19 int main(int argc, const char *argv[]) 20 { 21 datatype value; 22 stack_list *L = create_stack(); 23 if(NULL == L) 24 { 25 printf("调用函数失败\n"); 26 return -1; 27 } 28 stack_insert(L,1); 29 stack_insert(L,2); 30 stack_insert(L,3); 31 stack_insert(L,4); 32 stack_insert(L,5); 33 stack_show(L); 34 stack_pop(L,&value); 35 printf("%d\n",value); 36 printf("top =%d \n",stack_top(L)); 37 stack_clear(L); 38 stack_free(L); 39 return 0; 40 } 41 42 stack_list * create_stack() 43 { 44 stack_list * L = (stack_list * )malloc(sizeof(stack_list)); 45 if(NULL == L) 46 { 47 printf("内存空间开辟失败\n"); 48 return NULL; 49 } 50 L->top = -1; 51 return L; 52 } 53 54 int stack_insert(stack_list * L,datatype value) 55 { 56 if(stack_full(L)) 57 { 58 printf("栈空间已满\n"); 59 return -1; 60 } 61 L->top++; 62 L->data[L->top] = value; 63 return 0; 64 } 65 int stack_full(stack_list * L) 66 { 67 return L->top >= N-1 ?1:0; 68 } 69 70 void stack_show(stack_list *L) 71 { 72 int i; 73 for(i = 0; i<=L->top; i++) 74 { 75 printf("%d ",L->data[i]); 76 } 77 printf("\n"); 78 } 79 80 int stack_pop(stack_list * L,datatype * value) 81 { 82 if(stack_empty(L)) 83 { 84 printf("栈已经为空,无法继续删除\n"); 85 return -1; 86 } 87 *value = L->data[L->top]; 88 L->top--; 89 return 0; 90 } 91 92 int stack_empty(stack_list *L ) 93 { 94 return L->top < 0?1:0; 95 } 96 97 void stack_free(stack_list * L); 98 datatype stack_top(stack_list * L) 99 { 100 return L->data[L->top]; 101 } 102 void stack_clear(stack_list * L) 103 { 104 L->top = -1; 105 } 106 void stack_free(stack_list * L) 107 { 108 free(L); 109 L = NULL; 110 }