데이터 구조 - 스 택 의 순서 저장 표시

8105 단어 데이터 구조
데이터 구조 작업 의 5 는 템 플 릿 으로 저장 합 니 다.
#include
#include
#include // malloc() 
#include // INT_MAX 
#include // EOF(=^Z F6),NULL
#include // atoi()
#include // eof()
#include // floor(),ceil(),abs()
#include // exit()
#include // cout,cin
//         
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
// #define OVERFLOW -2    math.h    OVERFLOW   3,     
typedef int Status; // Status      ,           , OK 
typedef int Boolean; // Boolean     ,   TRUE FALSE

typedef int SElemType; //        
//        
#define STACK_INIT_SIZE 10 //          
#define STACKINCREMENT 2 //         
typedef struct
{
    SElemType *base; //            ,base   NULL
    SElemType *top; //     
    int stacksize; //           ,      
    int length;
} SqStack; //    
//         (9 )
Status InitStack(SqStack &S)
{
    ///       S
    S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!S.base)exit(OVERFLOW);
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    S.length=0;
    return OK;
}

Status DestroyStack(SqStack &S)
{
    ///    S,S    
    S.length=0;
    S.base=S.top=NULL;
    S.stacksize=0;

    free(S.base);
    return OK;
}

Status ClearStack(SqStack &S)
{
    ///  S    
    S.length=0;
    S.base=S.top=NULL;
    return OK;
}

Status StackEmpty(SqStack S)
{
    ///   S   ,   TRUE,    FALSE
    if(S.base==S.top)return TRUE;
    else return FALSE;
}

int StackLength(SqStack S)
{
    ///   S     ,     
    return S.length;
}

Status GetTop(SqStack S,SElemType &e)
{
    ///     ,  e  S     ,   OK;    ERROR
    if(S.top==S.base)return ERROR;
    e=*(S.top-1);
    return OK;
}

Status Push(SqStack &S,SElemType e)
{
    ///     e       
    if(S.top-S.base>=S.stacksize)
    {
        S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
        if(!S.base)exit(OVERFLOW);
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top++=e;
    S.length++;
    return OK;
}

Status Pop(SqStack &S,SElemType &e)
{
    ///     ,   S     , e    ,   OK;    ERROR
    if(S.top==S.base) return ERROR;
    e=*--S.top;
    S.length--;
    return OK;
}

Status StackTraverse(SqStack S,Status(*visit)(SElemType))
{
    //                    visit()。
    //   visit()  ,     
    int j=1;
    for(SElemType *i=S.top-1; j<=S.length; i--,j++)
    {
        visit(*(i));
    }
}


Status visit(SElemType c)
{
    printf("%d ",c);
    return OK;
}

void conversion(int n,int m)
{
    ///      
    SqStack S;
    SElemType e;
    InitStack(S);
    while(n)
    {
        Push(S,n%m);
        n=n/m;
    }
    while(!StackEmpty(S))
    {
        Pop(S,e);
        printf("%d",e);
    }
    printf("
"
); } int main() { char k='1'; int 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
"
,e); printf(" :%d(1: 0: )
"
,StackEmpty(s)); GetTop(s,e); printf(" e=%d %d
"
,e,StackLength(s)); ClearStack(s); printf(" , :%d(1: 0: )
"
,StackEmpty(s)); DestroyStack(s); printf(" ,s.top=%u s.base=%u s.stacksize=%d
"
,s.top,s.base, s.stacksize); while(k!='0')scanf("%c",&k); }

좋은 웹페이지 즐겨찾기