창고의 실현 코드

16476 단어
창고도 일종의 선형표로 제한을 받는 선형표에 불과하다
한 쪽에서만 요소를 읽거나 삭제할 수 있습니다.고급 후진 기능(FILO)
창고도 순서 창고와 체인 창고로 나뉜다
순서 창고는 다음 노드의 위치를 가리키는 추가 공간을 필요로 하지 않으며 공간 이용률이 높다
그러나 동적 확장이 불가능하고 체인 창고는 그와 마주친다.다음은 두 개의 창고 코드입니다.
순서 창고
#include 
#include 
#include 
#define OK 1
#define ERROR 0
#define MAX 100
#define DELAY 1


typedef int ElemType;
typedef int Status;
typedef struct{
  ElemType * base;
  ElemType * top;
} Sqstack;

Status initStack(Sqstack * stack){
  stack->base = (ElemType *)malloc(MAX * sizeof(ElemType));
  stack->top = stack->base;
  return OK;
}

Status stackEmpty(Sqstack stack){
  if(stack.top == stack.base)return OK;
  else return ERROR;
}

int stackLength(Sqstack stack){
  int count = stack.top - stack.base;
  return count;
}

Status getTopValue(Sqstack stack,ElemType * e){
  *e = *(stack.top-1);
  return OK;
}

Status Push(Sqstack *stack,ElemType e){

  if((stack->top - stack->base) >= MAX)return ERROR;
  *(stack->top) = e;
  stack->top++;
  return OK;
}

Status Pop(Sqstack *stack,ElemType * e){

  if(stack->top == stack->base)return ERROR;
  *e = *(stack->top-1);
  stack->top--;
  return OK;
}

Status printStack(Sqstack stack){
  
  if( stackEmpty(stack) ){
    printf("empty
"); return OK; } printf("stack len is %d
",stackLength(stack)); while(stack.base < stack.top){ printf("[%d] ",*(stack.base)); stack.base++; } printf("
"); return OK; } int main(){ Sqstack stack; ElemType value; initStack(&stack); while(1){ system("clear"); printf("p = push
P = pop
"); printf("g = get
Value e = exit
"); printStack(stack); printf("enter a your choose:"); char sel = getchar(); if( sel == 'p'){ printf("enter push value:"); scanf("%d",&value); Push(&stack,value); sleep(DELAY); } else if(sel == 'P'){ Pop(&stack,&value); printf("value:%d is poped
",value); sleep(DELAY); } else if(sel == 'g'){ getTopValue(stack,&value); printf("value is %d
",value); sleep(DELAY); } else if(sel == 'e'){ exit(0); } } }

 
체인 스택
#include 
#include 
#include 

#define OK 1
#define ERROR 0

typedef int ElemType;
typedef int Status;
typedef struct Node{
  ElemType data;
  struct Node * next;
} Node;

Node * initStack(){
  Node * s = (Node*)malloc(sizeof(Node));
  s->next = NULL;
  return s;
}

Status  Push(Node *s,ElemType e){
  Node *new = (Node*)malloc(sizeof(Node));
  new->data = e;
  new->next = s->next;
  s->next = new;
  return OK;
}

Status  Pop(Node *s,ElemType *e){
  Node *top = s->next;
  *e = top->data;
  s->next = top->next;
  free(top);
  return OK;
}

ElemType getTopvalue(Node *s){
  Node *top = s->next;
  return top->data;
}

int getLength(Node *s){
  int len=0;
  while(s->next){ 
    s=s->next;
    len++;
  }
  return len;
}

Status stackEmpty(Node *s){
  if(s->next)return ERROR;
  else return OK;
}

Status printStack(Node *s){
  if(stackEmpty(s)){printf("stack is empty
");return ERROR;} else printf("stack len is %d
",getLength(s)); while(s=s->next)printf("[%d]",s->data); printf("
"); return OK; } int main(){ char sel; ElemType val; Node * s = initStack(); while(1){ system("clear"); printStack(s); printf("enter code:"); sel = getchar(); if(sel == 'p'){ printf("enter value:"); scanf("%d",&val); Push(s,val); } if(sel == 'P'){ Pop(s,&val); printf("%d is poped
",val); sleep(1); } if(sel == 'g'){ printf("top value is %d
",getTopvalue(s)); sleep(1); } if(sel == 'e')exit(0); } }

좋은 웹페이지 즐겨찾기