모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_22432
    작성자 : 닉짓기어려움
    추천 : 0
    조회수 : 973
    IP : 117.17.***.112
    댓글 : 0개
    등록시간 : 2018/06/04 12:59:55
    http://todayhumor.com/?programmer_22432 모바일
    허프만코드 때문에 질문드려요 ㅠㅠ
    옵션
    • 본인삭제금지
    허프만 코드를 출력하는걸 문제로 주셨는데 출력까지는 했는데 작은순서대로 출력이안되요 <div><div>#include <stdio.h></div> <div>#include <stdlib.h></div> <div><br></div> <div>#define MAX_ELEMENT 100</div> <div><br></div> <div>typedef struct TreeNode{</div> <div><span style="white-space:pre;"> </span>int weight;</div> <div><span style="white-space:pre;"> </span>struct TreeNode *left_child;</div> <div><span style="white-space:pre;"> </span>struct TreeNode *right_child;</div> <div>} TreeNode;</div> <div>typedef struct{</div> <div><span style="white-space:pre;"> </span>TreeNode *ptree;</div> <div><span style="white-space:pre;"> </span>int key;</div> <div>} element;</div> <div>typedef struct{</div> <div><span style="white-space:pre;"> </span>element heap[MAX_ELEMENT];</div> <div><span style="white-space:pre;"> </span>int heap_size;</div> <div>}HeapType;</div> <div><br></div> <div><br></div> <div>//초기화 함수</div> <div>void init(HeapType *h){</div> <div><span style="white-space:pre;"> </span>h->heap_size=0;</div> <div>}</div> <div>// 노드 출력</div> <div>void print_tree(TreeNode *r, int n, char* code){</div> <div><span style="white-space:pre;"> </span>if(r){</div> <div><span style="white-space:pre;"> </span>n++;</div> <div><span style="white-space:pre;"> </span>code[n]='1';</div> <div><span style="white-space:pre;"> </span>print_tree(r->left_child,n,code);</div> <div><span style="white-space:pre;"> </span>code[n]='0';</div> <div><span style="white-space:pre;"> </span>print_tree(r->right_child,n,code);</div> <div><span style="white-space:pre;"> </span>code[n]='\0';</div> <div><span style="white-space:pre;"> </span>if(r->left_child==NULL || r->right_child == NULL)</div> <div><span style="white-space:pre;"> </span>printf("%d\t=%s\n",r->weight, code);</div> <div><span style="white-space:pre;"> </span>}</div> <div>}</div> <div>//삽입 함수</div> <div>void insert_min_heap(HeapType *h, element item){</div> <div><span style="white-space:pre;"> </span>int i;</div> <div><span style="white-space:pre;"> </span>i=++(h->heap_size);</div> <div><span style="white-space:pre;"> </span>//트리를 거슬러 올라가면서 부모 노드와 비교하는 과정</div> <div><span style="white-space:pre;"> </span>while((i!=1)&&(item.key < h->heap[i/2].key)){</div> <div><span style="white-space:pre;"> </span>h->heap[i] = h->heap[i/2];</div> <div><span style="white-space:pre;"> </span>i/=2;</div> <div><span style="white-space:pre;"> </span>}</div> <div><span style="white-space:pre;"> </span>h->heap[i]=item; //새로운 노드 삽입</div> <div>}</div> <div>//삭제 함수</div> <div>element delete_min_heap(HeapType *h){</div> <div><span style="white-space:pre;"> </span>int parent, child;</div> <div><span style="white-space:pre;"> </span>element item, temp;</div> <div><span style="white-space:pre;"> </span></div> <div><span style="white-space:pre;"> </span>item=h->heap[1];</div> <div><span style="white-space:pre;"> </span>temp=h->heap[(h->heap_size)--];<span style="white-space:pre;"> </span></div> <div><span style="white-space:pre;"> </span>parent=1;</div> <div><span style="white-space:pre;"> </span>child=2;</div> <div><span style="white-space:pre;"> </span>while(child <= h->heap_size){</div> <div><span style="white-space:pre;"> </span>//현재 노드의 자식 노드 중 더 작은 자식 노드를 찾는다.</div> <div><span style="white-space:pre;"> </span>if((child < h->heap_size) && (h->heap[child].key) > h->heap[child+1].key)</div> <div><span style="white-space:pre;"> </span>child++;</div> <div><span style="white-space:pre;"> </span>if(temp.key <= h->heap[child].key) break;</div> <div><span style="white-space:pre;"> </span>//한단계 아래로 이동</div> <div><span style="white-space:pre;"> </span>h->heap[parent] = h->heap[child];</div> <div><span style="white-space:pre;"> </span>parent=child;</div> <div><span style="white-space:pre;"> </span>child*=2;</div> <div><span style="white-space:pre;"> </span>}</div> <div><span style="white-space:pre;"> </span>h->heap[parent]=temp;</div> <div><span style="white-space:pre;"> </span>return item;</div> <div>}</div> <div>//이진 트리 생성 함수</div> <div>TreeNode *make_tree(TreeNode *left, TreeNode *right){</div> <div><span style="white-space:pre;"> </span>TreeNode *node=(TreeNode *)malloc(sizeof(TreeNode));</div> <div><span style="white-space:pre;"> </span>if(node==NULL){</div> <div><span style="white-space:pre;"> </span>fprintf(stderr,"메모리 에러\n");</div> <div><span style="white-space:pre;"> </span>exit(1);</div> <div><span style="white-space:pre;"> </span>}</div> <div><span style="white-space:pre;"> </span>node->left_child=left;</div> <div><span style="white-space:pre;"> </span>node->right_child=right;</div> <div><span style="white-space:pre;"> </span>return node;</div> <div>}</div> <div>//이진 트리 제거 함수</div> <div>void destroy_tree(TreeNode *root){</div> <div><span style="white-space:pre;"> </span>if(root==NULL) return;</div> <div><span style="white-space:pre;"> </span>destroy_tree(root->left_child);</div> <div><span style="white-space:pre;"> </span>destroy_tree(root->right_child);</div> <div><span style="white-space:pre;"> </span>free(root);</div> <div>}</div> <div>//허프만 코드 생성 함수</div> <div>void huffman_tree(int freq[], int n){</div> <div><span style="white-space:pre;"> </span>int i;</div> <div><span style="white-space:pre;"> </span>TreeNode *node, *x;</div> <div><span style="white-space:pre;"> </span>HeapType heap;</div> <div><span style="white-space:pre;"> </span>element e, e1, e2;</div> <div><span style="white-space:pre;"> </span>char* code=(char *)malloc(sizeof(char));</div> <div><span style="white-space:pre;"> </span></div> <div><span style="white-space:pre;"> </span>init(&heap);</div> <div><span style="white-space:pre;"> </span>for(i=0;i<n;i++){</div> <div><span style="white-space:pre;"> </span>node=make_tree(NULL,NULL);</div> <div><span style="white-space:pre;"> </span>e.key=node->weight = freq[i];</div> <div><span style="white-space:pre;"> </span>e.ptree=node;</div> <div><span style="white-space:pre;"> </span>insert_min_heap(&heap,e);</div> <div><span style="white-space:pre;"> </span>}</div> <div><span style="white-space:pre;"> </span>for(i=1;i<n;i++){</div> <div><span style="white-space:pre;"> </span>//최솟값을 가지는 두 개의 노드를 삭제</div> <div><span style="white-space:pre;"> </span>e1=delete_min_heap(&heap);</div> <div><span style="white-space:pre;"> </span>e2=delete_min_heap(&heap);</div> <div><span style="white-space:pre;"> </span>//두 개의 노드를 합친다.</div> <div><span style="white-space:pre;"> </span>x=make_tree(e1.ptree, e2.ptree);</div> <div><span style="white-space:pre;"> </span>e.key=x->weight=e1.key+e2.key;</div> <div><span style="white-space:pre;"> </span>e.ptree=x;</div> <div><span style="white-space:pre;"> </span>insert_min_heap(&heap,e);</div> <div><span style="white-space:pre;"> </span>}</div> <div><span style="white-space:pre;"> </span>e=delete_min_heap(&heap); //최종 트리</div> <div><span style="white-space:pre;"> </span>print_tree(e.ptree,-1,code);</div> <div><span style="white-space:pre;"> </span>destroy_tree(e.ptree);</div> <div>}</div> <div><br></div> <div>int main(void) {</div> <div><span style="white-space:pre;"> </span>int x,num,n=0, freq[MAX_ELEMENT];</div> <div><span style="white-space:pre;"> </span></div> <div><span style="white-space:pre;"> </span>while(1){</div> <div><span style="white-space:pre;"> </span>printf("1.입력 2.허프만 실행  3.종료\n");</div> <div><span style="white-space:pre;"> </span>scanf("%d",&x);</div> <div><span style="white-space:pre;"> </span>switch(x){</div> <div><span style="white-space:pre;"> </span>case 1:</div> <div><span style="white-space:pre;"> </span>printf("추가 : ");</div> <div><span style="white-space:pre;"> </span>scanf("%d",&num);</div> <div><span style="white-space:pre;"> </span>printf("%d\n",num);</div> <div><span style="white-space:pre;"> </span>freq[n]=num;</div> <div><span style="white-space:pre;"> </span>n++;</div> <div><span style="white-space:pre;"> </span>break;</div> <div><span style="white-space:pre;"> </span>case 2:</div> <div><span style="white-space:pre;"> </span>huffman_tree(freq,n);</div> <div><span style="white-space:pre;"> </span>case 3:</div> <div><span style="white-space:pre;"> </span>printf("종료");</div> <div><span style="white-space:pre;"> </span>return 0;</div> <div><span style="white-space:pre;"> </span>}</div> <div><span style="white-space:pre;"> </span>}</div> <div>}</div></div> <div><br></div>

    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    22453
    인공지능으로 액면가 분석하는 웹 사이트를 만들어 봤어요. msalt.net 18/06/17 22:49 718 1
    22452
    4년차 C개발자 커리어 전환 [5] romeo 18/06/17 20:45 1693 0
    22451
    인공지능의 완성은 아직 멀었다고 생각합니다. [2] 엔젤로피아 18/06/17 18:38 726 1
    22450
    사람들이 생각하는 프로그래밍 VS 실제 프로그래밍 [2] 육과출신 18/06/16 14:26 1374 7
    22449
    구글메일 비번을 까먹었는데. 찾을 수 있는 방법이 있을까요? 롤러롤러 18/06/16 13:35 583 0
    22448
    취업 전에 읽어두면 좋은 책이 있을까요?? [6] 본인삭제금지 DJ.A 18/06/13 16:55 845 0
    22445
    mysql api 결과값의 변수 저장관련 문의드립니다. [2] 본인삭제금지 상사꽃 18/06/10 18:40 818 0
    22443
    javascrip에서 json사용 질문있습니다. [2] 수능개망침 18/06/09 16:47 747 0
    22441
    자바 웹개발잔데 유니티배워서 모바일게임 만드려면 [2] SBBCFFFFS 18/06/09 08:16 959 0
    22438
    프로그래밍 재밋나요? [13] PIXEL 18/06/06 15:28 1540 0
    22437
    매트랩으로 열역학 문제 하나 풀었습니다. [1] 눈이나린다 18/06/05 21:56 896 3
    22436
    엑셀 수식 질문있습니다 [7] 본인삭제금지 예비군의마음 18/06/05 09:18 826 0
    22435
    홈페이지 견적에대해 아시는분 계신가요 [2] JSP때려침 18/06/05 01:29 728 0
    22434
    유니티 캐릭터못벗어나게하기 [2] 본인삭제금지 수원오징어 18/06/04 18:15 885 0
    22433
    컴퓨터구조, 알고리즘 책 추천 [3] 베스트금지베오베금지본인삭제금지 건드리면디저 18/06/04 13:13 1102 1
    허프만코드 때문에 질문드려요 ㅠㅠ 본인삭제금지 닉짓기어려움 18/06/04 12:59 974 0
    22431
    IT업계도 노조가 생기고 파업도 하는군요. - 한국오라클 노조 파업 [3] 코볼 18/06/04 09:47 1255 1
    22430
    mySQL 하시는 분 질문 드립니다 [3] 본인삭제금지 KuShion 18/06/03 20:06 887 0
    22427
    학교 선생이란 사람이 너무 개념이 없어 [5] 무한일요일 18/06/03 09:24 1070 4
    22426
    ios 다수 블루투스기기 연결 [4] 창작글본인삭제금지 virtu 18/06/03 01:08 849 0
    22425
    프로-프로그래머 여러분 옥체강녕하시옵니까 [7] 본인삭제금지 눈이나린다 18/06/03 00:02 1274 0
    22424
    프로그래머가 Vive Pro로 할만한것 [6] 한시운 18/05/31 20:22 1016 0
    22423
    ios EKEvent 잘아시는분들 질문드려요 ㅠㅠㅠ [1] 본인삭제금지 아재개그제조기 18/05/30 18:12 559 0
    22421
    html 아이콘 클릭시 화면 변경.. [4] 본인삭제금지 오피스넥스 18/05/29 11:47 1951 0
    22420
    c언어 헤더파일에 배열선언 질문드립니다. [4] 두번은힘들지 18/05/28 20:14 808 0
    22419
    코딩을 배워보고싶은 사람이 질문드립니다.(본삭금) [8] 본인삭제금지 MrBoo 18/05/28 12:25 1051 0
    22417
    자바스크립트 하나 여쭈어봐도 될까요?? [2] 본인삭제금지 천연지하수 18/05/26 17:56 787 0
    22416
    유니티 안드로이드 빌드 오류 [5] IPID 18/05/26 15:27 786 0
    22415
    궁금해서 물어봅니다. 이게 어떻게 가능한지... [6] gosubmit 18/05/25 22:13 756 0
    22414
    오토캐드 질문 제발 도와주세요 ㅠㅠ [4] ear두 18/05/24 18:56 801 0
    [◀이전10개] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈