OJ 스택의 기본 사용

2840 단어
``` c
#include 
#include 
#include 
#include "oj.h"


#define stackLength 50
struct std_stack{
	int  top; // , 
	void * data[stackLength]; // ,data , 
};


Stack* stack_create()
{
	//First: initialize the strcture of stack and get Address
	Stack * stack = (Stack*)malloc(sizeof(Stack));
	stack->top = 0;
	for(int i=0; idata[i] = NULL;
	return stack;
}




void stack_distory(Stack* self, void (*free_object)(void* object))
{
	if(self==NULL) return;
	if(free_object==NULL) return;


	for(int i=0; itop; i++)
	{
		if(self->data[i]!=NULL)
		{
			for(int j=i+1; jtop; j++)
			{
				if(self->data[i]== self->data[j])
					self->data[j] = NULL;
			}
			free_object(self->data[i]);
		}
	}
	free_object(self);
	return;
}




void stack_clear(Stack* self)
{
	if(self==NULL) return;


	// pop 
	while(!stack_empty(self))
	{
		stack_pop(self);
	}
	return;
}




void stack_push(Stack* self, void* data)
{
	// , 
	if(self == NULL) return;
	
	if(data == NULL)
		return;
	
	self->data[self->top] = data;
	self->top++;
	
	return;
}


void* stack_pop(Stack* self)
{


	//if stack is null
	if(self==NULL) return NULL;


	//First: judge the top element exist
	if(self->top == 0)
		return NULL;
	else
	{
		
		void * result = self->data[self->top-1];
		self->top--;
		self->data[self->top] = NULL;
		return result;
	}


	return NULL;
}


void* stack_peek(Stack* self)
{
	//judge stack whether null
	if(self==NULL)
		return NULL;




	//judge whether exists top object
	if(self->top == 0)
		return NULL;
	else{
		return self->data[self->top-1];
	}
	return NULL;
}


boolean stack_empty(Stack* self)
{
	if(self==NULL) return true;


	if(self->top !=0 )
		return false;
	else
		return true;
}


int stack_search(Stack* self, void* data, boolean (*match)(void* data))
{
	if(self == NULL ) return -1;
	if(data == NULL && match == NULL) return -1;
	
	if(match == NULL) {
		int pos = 0;
		for(int i=0; itop; i++){
			if(0 == strcmp((char*)(self->data[i]),(char *)(data))){
				pos = (self->top - i);
			}
		}
		/*while(!stack_empty(self)){
			pos++;
			char* data1 = (char *)stack_peek(self);
			if(0==strcmp(data1,(char*)data))
				return pos;
			stack_pop(self);
		}*/
		if(pos == 0) return -1;
		else return pos;
	}
	else{
		int pos = 0;
		//if(data == NULL) return -1;
		for(int i=0; itop; i++){	
			if(match(self->data[i])){
				pos = (self->top - i);
			}	
		}
		if(pos == 0) return -1;
		else return pos;
	}


	return -1;
}
```

#스택의 기본 사용
이 문제는 다음과 같습니다.
-**스택의 기본 구조체 정의**
-**Stack 이해검색 기능**
-**들어오는 매개 변수에 대한 공백값 판단**
-------------------
###코드는 다음과 같습니다.

좋은 웹페이지 즐겨찾기