데이터 구조 - 스 택 의 순서 저장 표시
8105 단어 데이터 구조
#include
#include
#include // malloc()
#include // INT_MAX
#include // EOF(=^Z F6),NULL
#include // atoi()
#include // eof()
#include // floor(),ceil(),abs()
#include // exit()
#include // cout,cin
//
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
// #define OVERFLOW -2 math.h OVERFLOW 3,
typedef int Status; // Status , , OK
typedef int Boolean; // Boolean , TRUE FALSE
typedef int SElemType; //
//
#define STACK_INIT_SIZE 10 //
#define STACKINCREMENT 2 //
typedef struct
{
SElemType *base; // ,base NULL
SElemType *top; //
int stacksize; // ,
int length;
} SqStack; //
// (9 )
Status InitStack(SqStack &S)
{
/// S
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
S.length=0;
return OK;
}
Status DestroyStack(SqStack &S)
{
/// S,S
S.length=0;
S.base=S.top=NULL;
S.stacksize=0;
free(S.base);
return OK;
}
Status ClearStack(SqStack &S)
{
/// S
S.length=0;
S.base=S.top=NULL;
return OK;
}
Status StackEmpty(SqStack S)
{
/// S , TRUE, FALSE
if(S.base==S.top)return TRUE;
else return FALSE;
}
int StackLength(SqStack S)
{
/// S ,
return S.length;
}
Status GetTop(SqStack S,SElemType &e)
{
/// , e S , OK; ERROR
if(S.top==S.base)return ERROR;
e=*(S.top-1);
return OK;
}
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)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
S.length++;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
/// , S , e , OK; ERROR
if(S.top==S.base) return ERROR;
e=*--S.top;
S.length--;
return OK;
}
Status StackTraverse(SqStack S,Status(*visit)(SElemType))
{
// visit()。
// visit() ,
int j=1;
for(SElemType *i=S.top-1; j<=S.length; i--,j++)
{
visit(*(i));
}
}
Status visit(SElemType c)
{
printf("%d ",c);
return OK;
}
void conversion(int n,int m)
{
///
SqStack S;
SElemType e;
InitStack(S);
while(n)
{
Push(S,n%m);
n=n/m;
}
while(!StackEmpty(S))
{
Pop(S,e);
printf("%d",e);
}
printf("
");
}
int main()
{
char k='1';
int 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);
while(k!='0')scanf("%c",&k);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.