데이터 구조 -- 순서 창고 의 기본 조작

2682 단어
순서 스 택 의 기본 작업 은 모 르 는 곳 이 있 습 니 다. 나중에 업데이트 하 겠 습 니 다.
// :                            FILO 

#define SATCK_INIT_SIZE 100                                //    
#define STACKINCREMENT 10                                  //       

#include
#include

typedef struct {
	int * base;//     
	int * top; //      //  top               
	int stack_size; 
} Sqstack;

void Init_stack(Sqstack *);         //        
void Fill_stack(Sqstack *);         //    
void Print_stack(Sqstack *);        //    
void Delete_stack_top(Sqstack *);   //       
void Add_stack_top(int ,Sqstack *); //     
void Judge_full(Sqstack *);         //      ,           
int main()                          //                                                                       
{
	Sqstack * S;
	int e=100;
	S = (Sqstack *)malloc(sizeof(Sqstack));
//	Sqstack  p;
//	S =& p;
//                (dev  ,vs2017   ),      ,       
	Init_stack( S );
	Fill_stack( S);
	Print_stack(S); 
	Delete_stack_top(S);
	Print_stack(S);
	Add_stack_top(e,S);
	Print_stack(S);
	return 0;
 } 
 void Init_stack(Sqstack * S )
 {
 	S->base = (int *)malloc(SATCK_INIT_SIZE *sizeof(int ));
 	if(!S->base)
 	{
 		printf("Fail to build the stack");
 		exit(1);
	 }
	 S->top = S->base;               //              
	 S->stack_size = SATCK_INIT_SIZE; //        
 }
 void Fill_stack(Sqstack *S)
 {
 	int i;
 	for(i=0;i<9;i++)
 	{
 		Judge_full(S);
 		*S->top++ = i;               // i  *S->top,   ,         
	 }
 }
 void Print_stack(Sqstack *S )
 {
 	int * p;
 	p = S->top;
 	if(S->base ==S->top )            //         
 	{
 		printf("the stack is empty");
 		exit(3);
	 }
	 printf("the elements of the stack:
"); while(p != S->base) { printf("%d ",*--p); // } printf("
"); } void Delete_stack_top(Sqstack *S) { if(S->base ==S->top ) { printf("the stack is empty"); exit(3); } S->top--; // } void Judge_full(Sqstack *S) { if((S->top)-(S->base) >= S->stack_size) // // “>=” “==” ? >= ? { S->base = realloc(S->base,(S->stack_size + SATCK_INIT_SIZE)*sizeof(int )) ; // if(!S->base) { printf("the Stack is Full but Fail to Realloc"); exit(2); } S->top = S->base + S->stack_size; // “>=” S->stack_size += SATCK_INIT_SIZE; } } void Add_stack_top(int e,Sqstack *S) { Judge_full(S); *S->top++ = e; // e }

좋은 웹페이지 즐겨찾기