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;
}