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;
}
실행 결과읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.