
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41


본문내용
sal 이용해서 문자만 출력
level_order(pRoot);
}
//////////////////////////////////////////////////////////////////////////
// 스택에 자료를 삽입
void push( void* stack , int* top , void* item , int data_type)
{
if ( *top > MAX_STACK_SIZE ){
fprintf(stderr , \"트리의 크기가 큽니다.\\n\");
exit(1);
}
// 데이터 타입에 따른 삽입을 달리함
switch(data_type)
{
case TYPE_CHAR:
((char*)stack)[++(*top)] = *(char*)item;
break;
case TYPE_PNODE:
((PNODE*)stack)[++(*top)] = (PNODE)item;
break;
default:
break;
}
}
//////////////////////////////////////////////////////////////////////////
// 스택 탑에 위치한 자료를 삭제
void* pop(void* stack , int* top , int data_type)
{
if( *top <= -1 ) fprintf(stderr , \"The stack is empty\\n\") , exit(1);
switch(data_type)
{
case TYPE_CHAR:
return &((char*)stack)[(*top)--];
case TYPE_PNODE:
return &((PNODE*)stack)[(*top)--];
default:
return NULL;
}
}
//////////////////////////////////////////////////////////////////////////
// 스택 탑에 위치한 자료를 가져옴
void* get_top( void* stack , int* top , int data_type )
{// 스택내에 자료가 존재 할시..
if ( *top > -1 && *top < MAX_STACK_SIZE-1)
{// 자료타입에 따라
switch(data_type)
{
// 자료반환
case TYPE_CHAR:
return &((char*)stack)[*top];
case TYPE_PNODE:
return &((PNODE*)stack)[*top];
default:
return NULL;
}
}
else
return NULL;
}
//////////////////////////////////////////////////////////////////////////
// 트리를 복사해서 그 복사된 트리의 루트를 반환
PNODE copyTree( PNODE original )
{
PNODE tmp = 0;
// 원본이 존재할 시 복사
if ( original )
{// 힙메모리 할당
tmp = (PNODE)malloc(sizeof(NODE));
if ( !tmp ){// 메모리 할당 실패일 경우 에러 출력
fprintf( stderr , \"The memory is full!\\n\");
exit(1);
}
// 해당노드가 데이터링크일 경우는 재귀함수 호출
if (original->tag == DLINK )
tmp->dlink = copyTree( original->dlink);
else // 데이터인경우 그냥 복제만.
tmp->dlink = original->dlink ;
tmp->link= copyTree( original->link );// 링크를 복사
tmp->tag= original->tag;// 태그 복사
return tmp;// 복제한 노드를 반환
}
// NULL일 시 널반환
return NULL;
}
//////////////////////////////////////////////////////////////////////////
// first와 second의 구조를 검사해서 같으면 참을 반환
bool isEaqual( PNODE first , PNODE second )
{
// 둘다 널일경우에 참 반환
if ( ( !first && !second ) )
return TRUE;
// 태그가 데이터링크 혹은 데이터 일때
// 둘다 존재하고 태그도 같고 데이터링크와 ,링크가 같으면 참 반환
else if ( first->tag == DLINK )
{
return ( ( first && second && ( first->tag == second->tag )
&& isEaqual( first->dlink , second->dlink ) /*링크라면 재귀함수 호출*/
&& isEaqual( first->link , second->link ) ) ) ;
}
else
{
return ( ( first && second && ( first->tag == second->tag )
&& (char)(first->dlink) == (char)(second->dlink) /*데이터라면 문자로 비교*/
&& isEaqual( first->link , second->link ) ) ) ;
}
}
//////////////////////////////////////////////////////////////////////////
// 문자열 사이의 공간(여백 , 탭)을 지움
void remove_space( char* string )
{
char* original_string = string; // 원래의 스트링
char str_tmp[MAX_STRING] = {0}; // 공백을 제거한 문자열을 임시저장 할 변수
int i = 0;// 임시 인덱스 변수
// 해당하는 변수가 존재하지 않거나
// 문자가 문자열 최대길이에 도달 할때까지
while (*string && i < MAX_STRING)
{
if (!isspace(*string))// 공백이 아니라면
// 복사하고 원본과 임시문자열의 다음 위치로 이동
str_tmp[i++] = *string++ ;
else // 공백이라면
string++;// 원본만 다음 문자열로 감
}
// 복사가 확실히 이뤄
level_order(pRoot);
}
//////////////////////////////////////////////////////////////////////////
// 스택에 자료를 삽입
void push( void* stack , int* top , void* item , int data_type)
{
if ( *top > MAX_STACK_SIZE ){
fprintf(stderr , \"트리의 크기가 큽니다.\\n\");
exit(1);
}
// 데이터 타입에 따른 삽입을 달리함
switch(data_type)
{
case TYPE_CHAR:
((char*)stack)[++(*top)] = *(char*)item;
break;
case TYPE_PNODE:
((PNODE*)stack)[++(*top)] = (PNODE)item;
break;
default:
break;
}
}
//////////////////////////////////////////////////////////////////////////
// 스택 탑에 위치한 자료를 삭제
void* pop(void* stack , int* top , int data_type)
{
if( *top <= -1 ) fprintf(stderr , \"The stack is empty\\n\") , exit(1);
switch(data_type)
{
case TYPE_CHAR:
return &((char*)stack)[(*top)--];
case TYPE_PNODE:
return &((PNODE*)stack)[(*top)--];
default:
return NULL;
}
}
//////////////////////////////////////////////////////////////////////////
// 스택 탑에 위치한 자료를 가져옴
void* get_top( void* stack , int* top , int data_type )
{// 스택내에 자료가 존재 할시..
if ( *top > -1 && *top < MAX_STACK_SIZE-1)
{// 자료타입에 따라
switch(data_type)
{
// 자료반환
case TYPE_CHAR:
return &((char*)stack)[*top];
case TYPE_PNODE:
return &((PNODE*)stack)[*top];
default:
return NULL;
}
}
else
return NULL;
}
//////////////////////////////////////////////////////////////////////////
// 트리를 복사해서 그 복사된 트리의 루트를 반환
PNODE copyTree( PNODE original )
{
PNODE tmp = 0;
// 원본이 존재할 시 복사
if ( original )
{// 힙메모리 할당
tmp = (PNODE)malloc(sizeof(NODE));
if ( !tmp ){// 메모리 할당 실패일 경우 에러 출력
fprintf( stderr , \"The memory is full!\\n\");
exit(1);
}
// 해당노드가 데이터링크일 경우는 재귀함수 호출
if (original->tag == DLINK )
tmp->dlink = copyTree( original->dlink);
else // 데이터인경우 그냥 복제만.
tmp->dlink = original->dlink ;
tmp->link= copyTree( original->link );// 링크를 복사
tmp->tag= original->tag;// 태그 복사
return tmp;// 복제한 노드를 반환
}
// NULL일 시 널반환
return NULL;
}
//////////////////////////////////////////////////////////////////////////
// first와 second의 구조를 검사해서 같으면 참을 반환
bool isEaqual( PNODE first , PNODE second )
{
// 둘다 널일경우에 참 반환
if ( ( !first && !second ) )
return TRUE;
// 태그가 데이터링크 혹은 데이터 일때
// 둘다 존재하고 태그도 같고 데이터링크와 ,링크가 같으면 참 반환
else if ( first->tag == DLINK )
{
return ( ( first && second && ( first->tag == second->tag )
&& isEaqual( first->dlink , second->dlink ) /*링크라면 재귀함수 호출*/
&& isEaqual( first->link , second->link ) ) ) ;
}
else
{
return ( ( first && second && ( first->tag == second->tag )
&& (char)(first->dlink) == (char)(second->dlink) /*데이터라면 문자로 비교*/
&& isEaqual( first->link , second->link ) ) ) ;
}
}
//////////////////////////////////////////////////////////////////////////
// 문자열 사이의 공간(여백 , 탭)을 지움
void remove_space( char* string )
{
char* original_string = string; // 원래의 스트링
char str_tmp[MAX_STRING] = {0}; // 공백을 제거한 문자열을 임시저장 할 변수
int i = 0;// 임시 인덱스 변수
// 해당하는 변수가 존재하지 않거나
// 문자가 문자열 최대길이에 도달 할때까지
while (*string && i < MAX_STRING)
{
if (!isspace(*string))// 공백이 아니라면
// 복사하고 원본과 임시문자열의 다음 위치로 이동
str_tmp[i++] = *string++ ;
else // 공백이라면
string++;// 원본만 다음 문자열로 감
}
// 복사가 확실히 이뤄
소개글