程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 順序棧,順序棧的基本操作

順序棧,順序棧的基本操作

編輯:關於C語言

順序棧,順序棧的基本操作


  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 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved