void delete_ContextManager(ContextManager *self) { for(int i = 0; i < self->num_platforms; ++i) delete_Platform(self->platforms[i]); ContextManager_ShutdownQueues(self); for(int i = 0; i < self->num_threads; ++i) { pthread_join(self->threads[i], NULL); } delete_Queue(self->incoming_queue, true); delete_Queue(self->outgoing_queue, true); SFREE(self); }
int HuffManCode(HuffMan * root, FILE * fp){ HuffMan * current = NULL; Queue * queue = NULL; queue = creat_Empty_Queue(); enter_Queue(queue, root); while ( ! is_empty_queue(queue)){ current = delete_Queue(queue); if ( current -> right_child == NULL && current -> left_child == NULL && current != root) { printf("%c %d %s \n", current -> ch, current -> weight, current -> code); fprintf(fp, "%c %s\n", current -> ch, current -> code); } if ( current -> right_child == NULL && current -> left_child == NULL && current == root) { strcpy(current -> code, "0"); printf("%c %d %s \n", current -> ch, current -> weight, current -> code); fprintf(fp, "%c %s\n", current -> ch, current -> code); } if (current -> left_child) { strcpy(current -> left_child -> code, current -> code); strcat(current -> left_child -> code, "0"); enter_Queue(queue, current -> left_child); } if (current -> right_child) { strcpy(current -> right_child -> code, current -> code); strcat(current -> right_child -> code, "1"); enter_Queue(queue, current -> right_child); } } return 0; }
HuffMan * creat_huffman_tree(Queue * head){ HuffMan * right; HuffMan * left; HuffMan * current; while ( !_is_empty_queue(head) ) { left = delete_Queue(head); right = delete_Queue(head); current = (HuffMan *)malloc(sizeof(HuffMan)); current -> weight = left -> weight + right -> weight; current -> left_child = left; current -> right_child = right; order_Enter_Queue(head, current); } return head -> front -> next -> data; }
int main() { int data_pop; //创建一个空的栈,pS指针指向该栈 PSTACK pS1 = create_stack(); PSTACK pS2 = create_stack(); enter_Queue(pS1,1); enter_Queue(pS1,2); enter_Queue(pS1,3); delete_Queue(pS1,pS2,&data_pop); printf("The pop data:%d\n",data_pop); delete_Queue(pS1,pS2,&data_pop); printf("The pop data:%d\n",data_pop); enter_Queue(pS1,4); enter_Queue(pS1,5); delete_Queue(pS1,pS2,&data_pop); printf("The pop data:%d\n",data_pop); enter_Queue(pS1,6); delete_Queue(pS1,pS2,&data_pop); printf("The pop data:%d\n",data_pop); delete_Queue(pS1,pS2,&data_pop); printf("The pop data:%d\n",data_pop); delete_Queue(pS1,pS2,&data_pop); printf("The pop data:%d\n",data_pop); return 0; }