void* thread2(void* arg) { Q_add("data 5"); Q_add("data 6"); Q_add("data 7"); Q_add("data 8"); Q_add("data 9"); Q_clear(); return NULL; }
void* thread1(void* arg) { Q_add("data 0"); Q_add("data 1"); Q_add("data 2"); Q_add("data 3"); Q_add("data 4"); Q_clear(); return NULL; }
void LG_topPrint(LGraph lg) { unsigned *indegree; unsigned i,count=0; DLL_Node* node_ptr; Queue q; if(lg.count==0) return ; indegree=(unsigned *)malloc(sizeof(unsigned)*lg.count); for(i=0;i<lg.count;i++) indegree[i]=lg.in_ptr[i]; Q_init(&q); for(i=0;i<lg.count;i++) if(indegree[i]==0) Q_push(&q,i); while(!Q_isEmpty(q)) { Q_getFront(q,&i); Q_pop(&q); printf("%c ",lg.d_ptr[i]); ++count; for(node_ptr=lg.l_ptr[i].head;node_ptr;node_ptr=node_ptr->next) { i=node_ptr->data; if(--indegree[i]==0) Q_push(&q,i); } } if(count<lg.count) printf("ͼÖÐÓлØ·£¬ÅÅÐòʧ°Ü\n"); else printf("\n"); Q_clear(&q); free(indegree); }