栈的线性表实现(顺序的栈)

  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 }

 

posted on 2019-04-17 16:48  骉赑  阅读(103)  评论(0编辑  收藏  举报

导航