コード例 #1
0
ファイル: MGraph.c プロジェクト: embedclub/Lavender
static void bfs(TMGraph* graph, int v, int visited[], MGraph_Printf* pFunc)
{
    LinkQueue* queue = LinkQueue_Create();
    
    if( queue != NULL )
    {
        LinkQueue_Append(queue, graph->v + v);
        
        visited[v] = 1;
        
        while( LinkQueue_Length(queue) > 0 )
        {
            int i = 0;
            
            v = (MVertex**)LinkQueue_Retrieve(queue) - graph->v;
            
            pFunc(graph->v[v]);
            
            printf(", ");
            
            for(i=0; i<graph->count; i++)
            {
                if( (graph->matrix[v][i] != 0) && !visited[i] )
                {
                    LinkQueue_Append(queue, graph->v + i);
                    
                    visited[i] = 1;
                }
            }
        }
    }
    
    LinkQueue_Destroy(queue);
}
コード例 #2
0
int main(int argc, char *argv[])
{
    LinkQueue* queue = LinkQueue_Create();
    int a[10] = {0};
    int i = 0;

    for(i=0; i<10; i++)
    {
        a[i] = i + 1;

        LinkQueue_Append(queue, a + i);
    }

    printf("Header: %d\n", *(int*)LinkQueue_Header(queue));
    printf("Length: %d\n", LinkQueue_Length(queue));

    LinkQueue_Clear(queue);

    while( LinkQueue_Length(queue) > 0 )
    {
        printf("Retrieve: %d\n", *(int*)LinkQueue_Retrieve(queue));
    }

    LinkQueue_Destroy(queue);

    return 0;
}
コード例 #3
0
ファイル: main.c プロジェクト: drsin/linuxCoreLearn
int main( void )
{
	LinkQueue * queue = LinkQueue_Create();
	stu_t s1 = {1, "芙蓉"};
	stu_t s2 = {2, "马涛"};
	stu_t s3 = {3, "李鹏"};
	
	LinkQueue_Append(queue, &s1);
	LinkQueue_Append(queue, &s2);
	LinkQueue_Append(queue, &s3);
	
	int i;
	int len = LinkQueue_Lenght(queue);
	for (i=0; i<len; i++) {
		stu_t *p = LinkQueue_Retrieve(queue);
		printf("%d %s\n", p->id, p->name);
	}
	
	LinkQueue_Destroy(queue);

	return 0;
}
コード例 #4
0
static void bfs(TMGraph* graph, int v, int visited[], MGraph_Printf* pFunc)
{
    LinkQueue* queue = LinkQueue_Create();
    
    if( queue != NULL ){
        LinkQueue_Append(queue, graph->v + v); // 直接+v 跳到v对应的地方 实际上就是 v[v][0]       
        visited[v] = 1; 
        
        while( LinkQueue_Length(queue) > 0 ){
            int i = 0;            
            v = (MVertex**)LinkQueue_Retrieve(queue) - graph->v; // 出队列减去 graph->v 起始地址得到偏移量            
            pFunc(graph->v[v]);            
            printf(", ");
            
            for(i=0; i<graph->count; i++){
                if( (graph->matrix[v][i] != 0) && !visited[i] ){
                    LinkQueue_Append(queue, graph->v + i); // 压人的时候 实际上是压入了定点v  这里的遍历可以理解成一颗大树                
                    visited[i] = 1;
                }
            }
        }
    }    
    LinkQueue_Destroy(queue);
}