OJ 스택의 기본 사용
``` 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 이해검색 기능**
-**들어오는 매개 변수에 대한 공백값 판단**
-------------------
###코드는 다음과 같습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.