順序棧操作:入棧,出棧,清空棧,銷燬棧等


#include<malloc.h>
#include<string.h>
#include<stdio.h>
 
#define OVERFLOW        -1
#define STACK_INIT_SIZE 10
#define STACKINCREMENT   2
#define OK               1
#define ERROR            0
#define TRUE             1
#define FALSE            0
 
typedef int SElemType;
typedef int Status; 
 
 
 
struct SqStack
{
    SElemType *base;
    SElemType *top;
    int stacksize;
};
 
Status InitStack(SqStack &S);
Status DestoryStack(SqStack &S);
Status ClearStack(SqStack &S);
Status StackEmpty(SqStack S);
int StackLength(SqStack S);
Status GetTop(SqStack S, SElemType &e);
Status Push(SqStack &S, SElemType e);
Status Pop(SqStack &S, SElemType &e);
Status StackTraverse(SqStack S, Status(*visit)());
 
Status InitStack(SqStack &S)
{
    S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!S.base) return OVERFLOW;
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return OK;
}
 
Status DestoryStack(SqStack &S)
{

   if( s.base ){

       free(S.base);
       S.base = NULL;
       S.top = NULL;
       S.stacksize = 0;
       return OK;

  }
  
}
 
Status ClearStack(SqStack &S)
{

    if( s.base ){

    S.top = S.base;

  }

 return OK;
}
 
Status StackEmpty(SqStack S)
{
    if(S.top == S.base)
        return TRUE;
    else
        return FALSE;
}
 
int StackLength(SqStack S)
{
    return S.top - S.base;
}
 
Status GetTop(SqStack S,SElemType &e)
{
    if(S.top == S.base) return ERROR;
    e = *(S.top -1);
    return OK;
}
 
Status Push(SqStack &S, SElemType e)
{
    if(S.top - S.base >= S.stacksize)
    {
        S.base = (SElemType *)realloc(S.base,(S.stacksize + STACKINCREMENT)*sizeof(SElemType));
        if(!S.base) return OVERFLOW;
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT; 
    }
    *S.top++ = e;
    return OK;
}
 
Status Pop(SqStack &S, SElemType &e)
{
    if(S.top == S.base) return ERROR;
    e = * --S.top;
    return OK;
}
 
Status StackTraverse(SqStack S, Status(* visit)(SElemType))
{
    while(S.top > S.base)
        visit(*S.base++);
    printf("\n");
    return OK;
}
 
Status visit(SElemType e)
{
    printf("%d ", e);
    return OK;
}
 
int main()
{
    SElemType j;
    SqStack s;
    SElemType e;
 
    if(InitStack(s) == OK)
        for(j = 1; j <= 12; j++)
        {
            Push(s,j);
        }
    printf("棧中的元素依次爲:");
    StackTraverse(s,visit);
    Pop(s, e);
    printf("彈出的棧頂元素 e=%d\n", e);
    printf("棧空否:%d(1:是 0:否)\n", StackEmpty(s));
    GetTop(s, e);
    printf("棧頂元素 e=%d 棧的長度爲%d\n", e, StackLength(s));
    ClearStack(s);
    printf("清棧後,棧空否:%d(1:空 0:否)\n",StackEmpty(s));
    DestoryStack(s);
    printf("銷燬棧後,s.top = %u s.base= %u s.stacksize=%d\n",s.top,s.base,s.stacksize);
    return 0;
}
--------------------- 
作者:親休息吧 
來源:CSDN 
原文:https://blog.csdn.net/wfdtxz/article/details/7976971 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章