데이터 구조 제3 장 스 택 과 대기 열 (1)

20531 단어 데이터 구조
//            
#include
#include
#define OVERFLOW -2
#define FALSE 0
#define TRUE 1
#define OK 1
#define ERROR 0
typedef int Status;
//        

#define STACK_INIT_SIZE 100 //          
#define STACKINCREAMENT 10  //        

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

//      
Status InitStack(SqStack *S);

//   S
Status DestroyStack(SqStack *S);

// S    
Status ClearStack(SqStack *S);

//       TRUE
Status StackEmpty(SqStack S);

//      
int StackLength(SqStack S);

//      
Status GetTop(SqStack S,SElemType *e);

//  
Status Push(SqStack *S,SElemType e);

//  
Status Pop(SqStack *S,SElemType *e);

//   
Status StackTraverse(SqStack S,Status( *visit)());

Status InitStack(SqStack *S)
{
	S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
	if(!S->base) exit(OVERFLOW);//      
	S->top=S->base;
	S->stacksize=STACK_INIT_SIZE;
	return OK;
}
Status GetTop(SqStack S,SElemType *e)
{
	if(S.top==S.base) return ERROR;
	*e=*(S.top-1);
	return OK;
}
Status Push(SqStack *S,SElemType e)
{
	if(S->top-S->base>=S->stacksize)//  ,      
	{
		S->base=(SElemType *)realloc(S->base,(S->stacksize+STACKINCREAMENT)*sizeof(SElemType));
		if(!S->base) exit(OVERFLOW);
		S->top=S->base+S->stacksize;
		S->stacksize+=STACKINCREAMENT;
	}
	//    ,     ,top   1
	*S->top++=e;
	return OK;
}
Status Pop(SqStack *S,SElemType *e)
{
	if(S->base==S->top) return ERROR;
	*e=*--S->top;
	return OK;
}
Status StackEmpty(SqStack S)
{
	if(S.base==S.top)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}
Status ClearStack(SqStack *S)
{
	S->top=S->base;
	return OK;
}
Status DestroyStack(SqStack *S)
{
	S->base=NULL;
	return OK;
}
//      ,    
void conversion(SqStack *S)
{
	//                ,         
	SElemType quotient;
	int N;
	InitStack(S);
	scanf("%d",&N);
	while(N)
	{
		Push(S,N%8);
		N=N/8;
	}
	while(!StackEmpty(*S))
	{
		Pop(S,&quotient);
		printf("%d",quotient);
	}
}
//     
//                        ,       
//        ,          ,               

void LineEdit(SqStack *S)
{
	char ch,c;
	ch=getchar();
	InitStack(S);
	while(ch!=EOF)
	{
		while(ch!=EOF && ch!='
'
) { switch(ch) { case '#':Pop(S,&c); break; case '@':ClearStack(S); break; default:Push(S,ch); break; } ch=getchar();// } // ClearStack(S);// if(ch!=EOF) ch=getchar(); } DestroyStack(S); }

다음은 미궁 구 해 문제, 표현 식 구 치 문제 (계산기 의 핵심 원리) 창고 와 귀환 의 실현, 한 노 타 문제, 마 답 바둑판 문제, 8 황후 문제 등 도 있다.나중에 따로 열거 하 겠 습 니 다. 대열 은 다음 단계 에 다시 이야기 하 겠 습 니 다.

좋은 웹페이지 즐겨찾기