[프로그램] 트리의 종합적인(삽입,삭제,복사,검사,출력) 프로그램
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

[프로그램] 트리의 종합적인(삽입,삭제,복사,검사,출력) 프로그램에 대한 보고서 자료입니다.

목차

1.개요

2.절차

3.소스

4.결과

5.소감문

본문내용

) : \");
scanf(\"%d\", &n);
switch(n){
case 1 : { // 원본을 출력 원할 경우
if(ptr){
printf(\"\\n[원본의 전위순회] \");
preorder(ptr); // 전위 순회 출력 함수 호출
printf(\"\\n[원본의 후위순회] \");
postorder(ptr); // 후위 순회 출력 함수 호출
printf(\"\\n\");
}
if(!ptr) { // 트리가 없을 경우
printf(\"바보야 아까 원본 니가 집에 가라며!!\\n\");
print_menu(); // 다시 출력 메뉴함수 호출
}
break;}
case 2 : { // 사본을 출력 원할 경우
if (ptr_2){
printf(\"\\n[사본의 전위순회] \");
preorder(ptr_2); // 전위 순회 출력 함수 호출
printf(\"\\n[사본의 후위순회] \");
postorder(ptr_2); // 후위 순회 출력 함수 호출
printf(\"\\n\");
}
if(!ptr_2) {
printf(\" 복사후 출력 하세요 (바보 사본이 어딧냐?)\\n\");
print_menu(); // 다시 출력 메뉴함수 호출
}
break;}
default : { // 두경우 이외의 경우 입력할 경우
printf(\" 바보 숫자두 못 읽냐? 다시해 임마\\n\");
print_menu();
break;}
}
}
//트리를 복사하는 함수
node_pointer copy(node_pointer original) // 원본 ptr을 인자로 받음
{
node_pointer temp; // 복사 받을 노드 선언
while(original){ // 원본 노드가 존재할 동안
temp = (node_pointer)malloc(sizeof(struct tree_node)); // 복사 받을 노드 생성
if(original->tag == 0){ // 데이타 노드 일때
temp->tag = original->tag; // 원본 태그값을 복사 함(값은 0)
temp->item = original->item; // 원본 데이타를 복사 함
temp->rlink=copy(original->rlink); // 링크 노드로 이동
}
else { // 링크 노드 일때
temp->tag = original->tag; // 원본 태그값을 복사 함(값은 1)
temp->dlink=copy(original->dlink); // 데이타 노드로 이동
temp->rlink=copy(original->rlink); // 형제 링크 노드로 이동
}
return temp; // 복사된 temp를 리턴함
}
return NULL; // 원본 노드가 없을시 NULL 리턴
}
//트리의 동일성 검사 함수
int equal(node_pointer first, node_pointer second) // 원본 ptr과 사본 ptr_2을 인자로 받음
{
if(!first==!second) return 1; // 원본과 사본 모두 트리가 없을 경우 \'1\' 리턴
while(first){ // 원본을 비교 대상으로 함(즉, 원본이 있을때)
if(first->tag == 0){ // 데이타 노드일때
if(first->tag != second->tag) // 노드의 태그값이 다르면 \'0\' 리턴
return 0;
else if(first->item !=second ->item) // 노드의 데이타가 다르면 \'0\' 리턴
return 0;
equal(first->rlink, second->rlink); // 링크 노드로 이동
}
else { // 링크 노드일때
if(first->tag != second->tag) // 노드의 태그값이 다르면 \'0\' 리턴
return 0;
equal(first->dlink, second->dlink); // 데이타 노드로 이동
equal(first->rlink, second->rlink); // 형제 링크 노드로 이동
}
return 1; // 원본과 사본이 같으면 \'1\' 리턴
}
return NULL; // 원본이 없을때 NULL 리턴
}
// 트리 삭제 메뉴 함수
void del_menu()
{
int n; // 삭제 메뉴 저장 변수
printf(\"어떤 트리를 삭제 하시겠습니까 (1. 원본 2. 사본 ) : \");
scanf(\"%d\", &n);
switch(n){
case 1 : { // 원본을 삭제 원할 경우
all_del(ptr); // 원본 ptr인자로 트리 삭제 함수 호출
printf(\"원본 트리를 삭제했습니다.\\n\");
break;}
case 2 : { // 사본을 삭제 원할 경우
all_del(ptr_2); // 사본 ptr_2인자로 트리 삭제 함수 호출
printf(\"사본 트리를 삭제했습니다.\\n\");
break;}
default : printf(\" 바~보 그런 항목 없으야~~\\n\"); // 두메뉴 이외의 경우 입력시 출력
}
}
//트리 전체 삭제 함수
void all_del(node_pointer del_node)
{
if(del_node){ // ptr이 있다면.. 즉, 트리가 존재한다면..
if(del_node->tag == 0){ // 즉, 데이타 노드이면
all_del(del_node->rlink); // 링크 노드로 이동
if(del_node==ptr) ptr=NULL; // 삭제 대상이 루트노드일때 ptr에 NULL을 넣음
if(del_node==ptr_2) ptr_2=NULL; // 삭제 대상이 루트노드일때 ptr_2에 NULL을 넣음
free(del_node); //노드 삭제
}
else { // 즉, 링크 노드이면
all_del(del_node->dlink); //데이타 노드로 이동
all_del(del_node->rlink); //형제 링크로 이동
}
}
}
5. 소 감 문 (여백 문제로 순서를 바꿨으니 수정하세요)
먼저 한학기 동안 자료구조론이라는 과목을 통하여 000 교수님을 뵙게 된 것을 영광으로 생각합니다. 교수님을 통하여 프로그램에 과한 지식이 많이 쌓였다고 자신있게 말할수 있습니다.
이번 Term을 통하여 작게는 트리구조 라는 개념을 보다 잘 이해하게 된 것 같고, 크게는 조원들과의 화합을 통하여 탐

키워드

C++,   트리,   동일성검사,   프로그램,   term,   종합
  • 가격2,000
  • 페이지수13페이지
  • 등록일2007.04.16
  • 저작시기2004.4
  • 파일형식한글(hwp)
  • 자료번호#404350
본 자료는 최근 2주간 다운받은 회원이 없습니다.
다운로드 장바구니