창고 - 순서 창고 (순서 표시 와 실현)

4809 단어
데이터 구 조 를 보면 창고 도 선형 표 이 고 그 특수성 은 창고 의 기본 조작 이 선형 표 조작의 서브 집합 이라는 데 있다.
추상 데이터 형식 스 택 의 정의:
스 택 (stack) 은 표 끝 에 삽입 하거나 삭제 작업 을 하 는 선형 표 로 한정 되 어 있 기 때문에 스 택 에 있어 표 끝 은 특별한 의 미 를 가지 고 스 택 지붕 이 라 고 부 르 고 해당 되 며 표 끝 은 스 택 바닥 이 라 고 부른다.원소 가 없 는 빈 시 계 를 빈 창고 라 고 합 니 다.
창고 -- 후진 선 출 (last in first out)
스 택 - 순서 스 택 - 스 택 의 순서 저장 구 조 는 주소 연속 저장 부 를 이용 하여 스 택 밑 에서 스 택 꼭대기 까지 차례대로 저장 하 는 데이터 요소 입 니 다.
얼마나
typedef struct {
    SElemType *base; //           ,base   NULL,    
    SElemType *top; //    
    int stacksize; //           
}SqStack,*Stack;

창고 의 순서 표시 와 실현 1:
//      
#include <stdlib.h>
#include <stdio.h>

#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;
typedef int SElemType;
//top     ,         ,  
//base     , base=NULL,        
//top=base         
typedef struct {
    SElemType *base; //           ,base   NULL
    SElemType *top; //    
    int stacksize; //           
}SqStack,*Stack;

Status init_stack(Stack s);//      
Status get_top(SqStack *s,SElemType *e); //     , e      ,   ok,    ERROR
Status push(Stack s,SElemType e); //    
Status pop(SqStack *s,SElemType *e); //     ,   s     , e    ,   ok,    ERROR

int main()
{
    //      
    SqStack s;
    //      
    init_stack(&s);
    //    
    int i;
    for(i=0;i<10;i++){
        push(&s,i);
    }
    int top_e ;
    get_top(&s,&top_e);
    printf("     :%d
",top_e);     int pop_e;     pop(&s,&pop_e);     printf(" :%d
",pop_e);     int n;     get_top(&s,&n);     printf(" :%d
",n);     return 0; } Status init_stack(SqStack *s){     printf("aaaaaaaa");     // s     //malloc ,     s->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));     printf("
______");     if(!s->base){         exit(OVERFLOW);     }     s->top=s->base;     s->stacksize = STACK_INIT_SIZE;     return OK; }// // , e , ok, ERROR Status get_top(SqStack *s,SElemType *e){     if(s->base==s->top){         return ERROR;     }     *e = *(s->top-1);     return OK; } Status push(Stack s,SElemType 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->top;     return OK; } Status pop(SqStack *s,SElemType *e){     // , s , e ,     if(s->top==s->base){         return ERROR;     }     --s->top;     *e = *(s->top);     return OK; }

창고 의 순서 표시 와 실현 2:
#include <stdio.h>
#include <stdlib.h>
//================      ================
#define STACK_INIT_SIZE 10 //      
#define STACKINCREMENT 5   //           


typedef int SElemType; //  SElemType    int 
typedef struct{
    SElemType *base;//  
    SElemType *top; //  
    int stacksize;  //    
}SqStack;

//===============     
void InitStack(SqStack *S)
{
    S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!S->base){
       printf("malloc error
");        exit(1);     }else{        printf("malloc success
");     }     S->top=S->base;     S->stacksize = STACK_INIT_SIZE; } //=================Push : S  ,e void 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){             printf("realloc error
");             exit(1);        }else {             printf("realloc success
");        }        S->top = S->base + S->stacksize;        S->stacksize=+STACKINCREMENT;     }     *S->top++ = e; } //===============Pop: ,s ,e int Pop(SqStack *S,int *e) {     if(S->base == S->top){         printf("empty
");         exit(1);     }     S->top--;     *e = *S->top;     return 0; } int main() {     SqStack S;     int i,data,a,n;     InitStack(&S); //     printf("input data
");     scanf("%d",&data);     while(data!=0)     {        Push(&S,data);        scanf("%d",&data);     }     printf("output n
"); //     scanf("%d",&n);     for(i=0;i<n;i++)     {         Pop(&S,&a);         printf("%d
",a);     }     return 0; }

좋은 웹페이지 즐겨찾기