데이터 구조3: 스 택: C 언어

6910 단어 데이터 구조
순서 창고

데이터 구조
#define MAXSIZE 20 /*           */

typedef int Status; 
typedef int SElemType; /* SElemType          ,     int */

/*       */
typedef struct
{
        SElemType data[MAXSIZE];
        int top; /*        */
}SqStack;

기본 조작
/*   S     ,      */
int StackLength(SqStack S)
{ 
        return S.top+1;
}

/*     ,  e  S     ,   OK;    ERROR */
Status GetTop(SqStack S,SElemType *e)
{
        if (S.top==-1)
                return ERROR;
        else
                *e=S.data[S.top];
        return OK;
}

/*     e        */
Status Push(SqStack *S,SElemType e)
{
        if(S->top == MAXSIZE -1) /*    */
        {
                return ERROR;
        }
        S->top++;               /*         */
        S->data[S->top]=e;  /*               */
        return OK;
}

/*     ,   S     , e    ,   OK;    ERROR */
Status Pop(SqStack *S,SElemType *e)
{ 
        if(S->top==-1)
                return ERROR;
        *e=S->data[S->top]; /*             e */
        S->top--;               /*        */
        return OK;
}

테스트
int main()
{
        int j;
        SqStack s;
        int e;
        if(InitStack(&s)==OK)
                for(j=1;j<=10;j++)
                        Push(&s,j);
        printf("       :");
        StackTraverse(s);
        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))
; return 0; }

공유 창고
데이터 구조
typedef int Status; 

typedef int SElemType; /* SElemType          ,     int */


/*          */
typedef struct 
{
        SElemType data[MAXSIZE];
        int top1;   /*  1     */
        int top2;   /*  2     */
}SqDoubleStack;

조작
/*   S     ,      */
int StackLength(SqDoubleStack S)
{ 
        return (S.top1+1)+(MAXSIZE-S.top2);
}

/*     e        */
Status Push(SqDoubleStack *S,SElemType e,int stackNumber)
{
        if (S->top1+1==S->top2) /*    ,   push     */
                return ERROR;   
        if (stackNumber==1)         /*  1      */
                S->data[++S->top1]=e; /*    1  top1+1        。 */
        else if (stackNumber==2)    /*  2      */
                S->data[--S->top2]=e; /*    2  top2-1        。 */
        return OK;
}

/*     ,   S     , e    ,   OK;    ERROR */
Status Pop(SqDoubleStack *S,SElemType *e,int stackNumber)
{ 
        if (stackNumber==1) 
        {
                if (S->top1==-1) 
                        return ERROR; /*    1     ,   */
                *e=S->data[S->top1--]; /*   1        */
        }
        else if (stackNumber==2)
        { 
                if (S->top2==MAXSIZE) 
                        return ERROR; /*    2     ,   */
                *e=S->data[S->top2++]; /*   2        */
        }
        return OK;
}

귀착 하 다

좋은 웹페이지 즐겨찾기