/* * === FUNCTION ====================================================================== * Name: main * Description: * ===================================================================================== */ int main ( int argc, char *argv[] ) { int k=0; Queue my_queue; Tree_node my_tree_node; Queue_node dequeue_node; my_tree_node = malloc ( sizeof(struct tree_node) ); if ( my_tree_node==NULL ) { fprintf ( stderr, "\ndynamic memory allocation failed\n" ); exit (EXIT_FAILURE); } my_tree_node->data='A'; my_tree_node->firstchild=NULL; my_tree_node->nextsibling = NULL; my_queue = Init_Queue(); for(k=0;k<7;k++) { Enqueue(my_queue, my_tree_node); my_tree_node->data='A'+k+1; } Print_Queue(my_queue); printf("\n"); while((dequeue_node=Dequeue(my_queue))!=NULL) { printf("<!!%c!!>\n",dequeue_node->node_data.data); free(dequeue_node); Print_Queue(my_queue); printf("**************************\n\n"); } return EXIT_SUCCESS; } /* ---------- end of function main ---------- */
int TopoSort (ALGraph G) { Queue *q; int indegree[MAX], outdegree[MAX]; int i, count, k; ArcNode *p; Degree_A (G, outdegree, indegree); Init_Queue (&q); for (i = 0; i < G.vernum; i++) if (indegree[i] == 0) In_Queue (q, i); count = 0; while (!IsEmpty_Queue (q)) { Out_Queue (q, &i); printf ("%c ", G.vertex[i].data); count++; p = G.vertex[i].firstArc; while (p) { k = p->adj; indegree[k]--; if (indegree [k] == 0) In_Queue (q, k); p = p->nextArc; } } if (count < G.vernum) return 0; else return 1; }
void BFS_A (ALGraph G, int vi) { Queue *q; Init_Queue (&q); ArcNode *p; int v; printf ("%c ", G.vertex[vi].data); In_Queue (q, vi); visited[vi] = 1; while (!IsEmpty_Queue (q)) { Out_Queue (q, &v); p = G.vertex[v].firstArc; while (p) { if (!visited[p->adj]) { printf ("%c ", G.vertex[p->adj].data); visited[p->adj] = 1; In_Queue (q, p->adj); } p = p->nextArc; } } }
int main() { SeQueue *q; q = Init_Queue(); for (int i = 0; i < 6; i++) Push_Queue(q, i); Print_Queue(q); Destroy_Queue(q); }
/* * === FUNCTION ====================================================================== * Name: Levelorder_Traverse * Description: 层序遍历函数 * ===================================================================================== */ void Levelorder_Traverse ( Bitree my_tree ) { if(my_tree == NULL) return; Queue my_queue; my_queue = Init_Queue(); Bitree dequeue_node; Enqueue(my_queue , my_tree); while((dequeue_node = Dequeue(my_queue))!=NULL) { // Traverse_Queue(my_queue); printf("#%d>>>%c\n",dequeue_node->index , dequeue_node->data); fflush(stdout); if(dequeue_node->leftchild != NULL) Enqueue(my_queue, dequeue_node->leftchild); if(dequeue_node->rightchild !=NULL) Enqueue(my_queue , dequeue_node->rightchild); } return; } /* ----- end of function Levelorder_Traverse ----- */
void BFS (MGraph G, int vi) { Queue *q; Init_Queue (&q); int v, i; printf ("%c ", G.vertex[vi]); In_Queue (q, vi); visited[vi] = 1; while (!IsEmpty_Queue (q)) { Out_Queue (q, &v); i = 0; while (i < G.vernum) { if (!visited[i] && G.arcs[v][i] != INFINITY) { printf ("%c ", G.vertex[i]); visited[i] = 1; In_Queue (q, i); } i++; } } }