Mercurial > hg > Members > nobuyasu > CbC
view Huffman/test-huffman.c @ 22:13a2c13bbd0b draft
add unbalance_binary_tree.cbc
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 13 Aug 2012 03:49:55 +0900 |
parents | 42f3a796c0be |
children |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #define N 256 #define READ_BUF_SIZE 1024 #define INPUT(fp, buf, result, max_size) result = fread(buf, 1, max_size, fp) int parent[2*N]; int l_node[2*N], r_node[2*N]; void q_sort(int* numbers[], int left, int right) { int pivot, l_hold, r_hold; int *bp; l_hold = left; r_hold = right; pivot = *numbers[left]; bp = numbers[left]; while (left < right) { while ((*numbers[right] >= pivot) && (left < right)) right--; if (left != right) { numbers[left] = numbers[right]; left++; } while ((*numbers[left] <= pivot) && (left < right)) left++; if (left != right) { numbers[right] = numbers[left]; right--; } } numbers[left] = bp; pivot = left; left = l_hold; right = r_hold; if (left < pivot) q_sort(numbers, left, pivot-1); if (right > pivot) q_sort(numbers, pivot+1, right); } void quick_sort(int* numbers[], int array_size) { q_sort(numbers, 0, array_size - 1); } int encode(char *buf, size_t n_chars) { int alp[N]; int i; for (i=0; i<N; i++ ) alp[i] = 0; for (i=0; i<n_chars; i++ ) { alp[buf[i]]++; } int *numbers[N]; for (i=0; i<N; i++ ) numbers[i] = alp+i; quick_sort(numbers, N); /* int node[2*N]; int node_count = 0; int *prev_node; for (i=0; i<2*N; i++) node[i] = 0; */ struct node { int cost; int *p; struct node *parent, *l_child, *r_child; }; struct node nodes[N]; nodes = malloc(sizeof(struct node)*N); int node_count = 0; // initialization of nodes for (i=0; i<N; i++) { nodes[i].cost = 0; nodes[i].parent = NULL; nodes[i].l_child = NULL; nodes[i].r_child = NULL; } // make tree. for (i=0; i<N; i++ ) { if (*numbers[i] == 0) continue; nodes[node_count] = ; node_count++; } free(hoge); return 0; } int main(int argc, char* argv[]) { FILE *fp; char *filename = "./sample.txt"; if ( (fp = fopen( filename,"r")) == NULL ) { fprintf(stderr, "Can't open file %s\n", filename); exit(0); } char base[READ_BUF_SIZE]; char *buf; size_t n_chars; INPUT(fp, base, n_chars, READ_BUF_SIZE); do { buf = base; int ret; encode(buf, n_chars); /* while ( (ret = (int)*buf) != '\0' ) { putc(*buf,stdout); ++buf; } */ if ( n_chars < READ_BUF_SIZE ) { break; } } while ( INPUT(fp, base, n_chars, READ_BUF_SIZE)); fclose(fp); return 0; }