C 언어 데이터 구조 창고 의 기초 조작

5659 단어 C 언어창고.
C 언어 데이터 구조 창고 의 기초 조작
스 택 의 기본 작업 을 실 현 했 습 니 다.스 택 에 들 어가 서 스 택 을 나 가 는 것 과 책 에 쓰 여 있 지 않 은 스 택 을 없 애 는 등 작업 을 포함 하고 코드 에 대해 상세 한 설명 을 했 습 니 다.
MyStack.h

/*
 * Include.h
 *
 * Created on: 2016.11.23
 *   Author: Jack Cui
 */

#ifndef MYSTACK_H_
#define MYSTACK_H_

#include <stdlib.h>
#include <stdio.h>
#include <malloc.h> 
/* (Stack)                    
**  (top)   (bottom)  ,     
**
*/

//SElemType      、         、            
typedef int SElemType;

//        
#define TRUE    1  
#define FALSE    0
#define OK     1
#define ERROR    0
#define INFEASIBLE -1   //   
#define MY_OVERFLOW -2   //  

/**********        **********/
#define STACK_INIT_SIZE 100   //         
#define STACKINCREMENT 10   //        

typedef struct{
  SElemType *base;  //           ,base   NULL
  SElemType *top;   //    
  int stacksize;   //     
}SqStack;
/**********           **********/
//      S
Status InitStack(SqStack &S);      
//   S,S    
Status DestroyStack(SqStack &S);
// S    
Status ClearStack(SqStack &S);
//  S   ,   TURE,    FALSE
Status StackEmpty(SqStack S); 
//  S     ,     
int StackLength(SqStack S);
//    ,  e  S     ,   OK;    ERROR
Status GetTop(SqStack S, SElemType &e); 
//    e       
Status Push(SqStack &S, SElemType e);
//    ,   S     , e     ,   OK;    ERROR;
Status Pop(SqStack &S, SElemType &e);
//                   visit();  visit()  ,     
Status StackTraverse(SqStack S, Status(* visit)(SElemType));
//visit()  
Status visit(SElemType e);
//    
Status TestMyStack();

#endif MYSTACK_H_

MyStack.c

#include "MyStack.h"

Status InitStack(SqStack &S){
  //      S
  S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
  if(!S.base){    //      
    printf("InitStack: malloc err
"); exit(MY_OVERFLOW); } S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; }//InitStack Status DestroyStack(SqStack &S){ if(!S.base){ printf("DestroyStack: Stack does not exist
"); exit(MY_OVERFLOW); } // malloc , , // free , , 。 free(S.base); S.top = NULL; S.base = NULL; S.stacksize = 0; return OK; }//DestroyStack Status ClearStack(SqStack &S){ if(!S.base){ printf("ClearStack: Stack does not exist
"); exit(MY_OVERFLOW); } S.top = S.base; return OK; }//ClearStack Status StackEmpty(SqStack S){ if(S.top == S.base){ return TRUE; } else{ return FALSE; } }//StackEmpty int StackLength(SqStack S){ return S.top - S.base; }//StackLength Status GetTop(SqStack S, SElemType &e){ //// , e S , OK; ERROR if(S.top == S.base){ printf("GetTop: Stack is empty
"); return ERROR; } e = *(S.top - 1); return OK; }//GetTop 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){ printf("Push: realloc error
"); } S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; //*S.top = e; S.top++; return OK; }//Push Status Pop(SqStack &S, SElemType &e){ // , S , e , OK, ERROR; if(S.top == S.base){ printf("Pop: Stack is empty
"); return ERROR; } e = *--S.top; //S.top--; e = *S.top; return OK; }//Pop Status StackTraverse(SqStack S, Status(* visit)(SElemType)){ while(S.top > S.base){ visit(*S.base++); } printf("
"); return OK; }//StackTraverse Status visit(SElemType e){ printf("%d ",e) ; return OK; }//visit Status TestMyStack(){ 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
", 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); return 0; }//TestMyStack // int main(){ TestMyStack(); system("pause"); return 0; }
실행 결과

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기