Example #1
0
/* 
 * ===  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  ---------- */
Example #2
0
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;
}
Example #3
0
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;
		}
	}
}
Example #4
0
int main()
{
  SeQueue *q;
  q = Init_Queue();
  for (int i = 0; i < 6; i++)
    Push_Queue(q, i);
  Print_Queue(q);
  Destroy_Queue(q);
}
Example #5
0
/* 
 * ===  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  ----- */
Example #6
0
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++;
		}
	}
}