码迷,mamicode.com
首页 > 其他好文 > 详细

顺序栈

时间:2016-02-28 12:28:35      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 #define STACK_INIT_SIZE 10
  5 #define STACKINCREASE 10
  6 #define OK 1
  7 #define ERROR 0
  8 
  9 typedef int ElemType;
 10 typedef int Status;
 11 
 12 typedef struct{
 13     ElemType* base;
 14     ElemType* top;
 15     int InitSize;
 16 }SuqStack;
 17 
 18 Status InitStack(SuqStack* s){
 19     s->base = (ElemType *)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
 20     if(!s->base)
 21         return ERROR;
 22     s->top = s->base;
 23     s->InitSize = STACK_INIT_SIZE;
 24     return OK;
 25 }
 26 Status ClearStack(SuqStack* s){
 27     s->top = s->base;
 28     return OK;
 29 }
 30 Status DestroyStack(SuqStack* s){
 31     int i;
 32     for(i = 1; i < s->InitSize; i++){
 33         free(s->base);
 34         s->base++;
 35     }
 36     s->base = s->top = NULL;
 37     s->InitSize = 0;
 38     return OK;
 39 }
 40 Status Pop(SuqStack* s, ElemType* result){
 41     if(s->base == s->top)
 42         return ERROR;
 43     *result = *(--(s->top));
 44     return OK;
 45 }
 46 Status Push(SuqStack* s,ElemType value){
 47     if(s->top - s->base == s->InitSize){
 48         s->base = (ElemType* )realloc(s->base,sizeof(ElemType) * (s->InitSize + STACKINCREASE));
 49         if(!s->base)
 50             return ERROR;
 51         s->top = s->base + STACK_INIT_SIZE;
 52         s->InitSize = STACKINCREASE + STACK_INIT_SIZE;
 53         printf("has a overflow");
 54     }
 55     *(s->top) = value;
 56     (s->top)++;
 57     return OK;
 58 }
 59 //test
 60 Status CreateStack(SuqStack* s,int size){
 61     int i;
 62     for(i = 1; i <= size; i++){
 63         printf("please enter the element%d: ",i);
 64         scanf("%d",(s->top));
 65         //printf("%d\n",*(s->top));
 66         (s->top)++;
 67         //printf("%d\n",s->top);
 68     }
 69     return OK;
 70 }
 71 Status ShowStack_FromTop(SuqStack s){
 72     printf("\n");
 73     while(s.top != s.base){
 74         (s.top)--;
 75         printf("%d ",*(s.top));
 76     }
 77     printf("\n");
 78     return OK;
 79 }
 80 int main(){
 81     SuqStack s;
 82     InitStack(&s);
 83     //CreateStack(&s,5);
 84     Push(&s,3);
 85     Push(&s,5);
 86     Push(&s,4);
 87     Push(&s,1);
 88     Push(&s,97);
 89     Push(&s,423);
 90     ShowStack_FromTop(s);
 91     int r;
 92     Pop(&s,&r);
 93     printf("Pop is %d!  ",r);
 94     Pop(&s,&r);
 95     printf("Pop is %d!  ",r);
 96     Pop(&s,&r);
 97     printf("Pop is %d!  ",r);
 98     ShowStack_FromTop(s);
 99     
100     return 0;
101 }

 

顺序栈

标签:

原文地址:http://www.cnblogs.com/robin-xu/p/5224352.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!