當前位置: 首頁>>代碼示例>>C++>>正文


C++ EnQueue函數代碼示例

本文整理匯總了C++中EnQueue函數的典型用法代碼示例。如果您正苦於以下問題:C++ EnQueue函數的具體用法?C++ EnQueue怎麽用?C++ EnQueue使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。


在下文中一共展示了EnQueue函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。

示例1: TraverseBiTree

//二叉樹廣度遍曆--即層次遍曆
//使用隊列來實現
int TraverseBiTree(BiTree T)
{
    LinkQueue Q;
    InitQueue(&Q);

    BiTree tmp=T;
    if(tmp==NULL)
    {
        exit(ERROR);
    }
    EnQueue(&Q,tmp);
    while(QisEmpty(Q)!=true)
    {
        DeQueue(&Q,&tmp);
        printf("%c",tmp->data);
        if(tmp->lchild!=NULL)
        {
            EnQueue(&Q,tmp->lchild);
        }
        if(tmp->rchild!=NULL)
        {
            EnQueue(&Q,tmp->rchild);
        }
    }
    return true;
}
開發者ID:yalove,項目名稱:datestructure,代碼行數:28,代碼來源:二叉樹--二叉鏈表存儲方式.c

示例2: BFSTraverse

/**
 * 算法7.6,按廣度優先非遞歸遍曆圖G,使用輔助隊列Q和訪問標誌數組visited
 */
void BFSTraverse(ALGraph G, Boolean visited[], Status (*Visit)(ALGraph G, int v))
{
	int u, v, w;
	LinkQueue Q;
	InitQueue(Q);
	
	for (v = 0; v < G.vexnum; v++) {
		visited[v] = false;
	}

	for (v = 0; v < G.vexnum; v++) {
		if (!visited[v]) {
			visited[v] = true;
			Visit(G, v);
			EnQueue(Q, v);
			while (!QueueEmpty(Q)) {
				DeQueue(Q, u);		//附著元素出列並置為u
				for (w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w)) {
					if (!visited[w]) {
						visited[w] = true;
						Visit(G, w);
						EnQueue(Q, w);
					}
				}
			}
		}
	}
}
開發者ID:Annie2333,項目名稱:DS_Code,代碼行數:31,代碼來源:DFS_BFS.cpp

示例3: BFSTraverse

/////////廣度優化遍曆/////////
void BFSTraverse(MGraph G)
{
  int i, j;
  Queue Q;
  //初始化所有頂點狀態
  for (i = 0; i < G.numVertexes; i++)
    visited[i] = FALSE;
  InitQueue(&Q);
  for (i = 0; i < G.numVertexes; i++) {
    if (!visited[i]) {
      visited[i] = TRUE;
      printf("%c ", G.vexs[i]);
      EnQueue(&Q, i);
      while(!QueueEmpty(Q)) {
        DeQueue(&Q, &i);
        for (j = 0; j < G.numVertexes; j++) {
          if (G.arc[i][j] != INFINITY && !visited[j]) {
            visited[j] = TRUE;
            printf("%c ", G.vexs[j]);
            EnQueue(&Q, j);
          }
        }
      }
    }
  }
}
開發者ID:GaobinWang,項目名稱:C,代碼行數:27,代碼來源:Operation.c

示例4: BFS

void BFS(AdjGraph G,int i)
{
    int k;
    EdgeNode p;
    QUEUE Q;
    MakeNull(Q);
    EnQueue(k,Q);
    while(!Empty(Q));
    {
        i=DeQueue(Q);
        p=G.verlist[i].firstedge;
        while(p)
        {
            if(!visit[p->adjvex])
            {
                 LineList[++edgenum].head=G.verlist[i].vertex;
                 LineList[++edgenum].tail=G.verlist[p->adjvex].vertex;
                visit[p->adjvex]=1;
                EnQueue(p->adjvex,Q);
            }
            p=p->next;
        }
    }

}
開發者ID:silent1993,項目名稱:c-language,代碼行數:25,代碼來源:graph-bfs.cpp

示例5: BFSTraverse

void BFSTraverse(ALGraph G,void(*Visit)(char*))
{/*按廣度優先非遞歸遍曆圖G。使用輔助隊列Q和訪問標誌數組visited。*/
  int v,u,w;
  VertexType u1,w1;
  LinkQueue Q;
  for(v=0;v<G.vexnum;++v)
    visited[v]=FALSE; /* 置初值 */
  InitQueue(&Q); /* 置空的輔助隊列Q */
  for(v=0;v<G.vexnum;v++) /* 如果是連通圖,隻v=0就遍曆全圖 */
    if(!visited[v]) /* v尚未訪問 */
    {
      visited[v]=TRUE;
      Visit(G.vertices[v].data);
      EnQueue(&Q,v); /* v入隊列 */
      while(!QueueEmpty(Q)) /* 隊列不空 */
      {
        DeQueue(&Q,&u); /* 隊頭元素出隊並置為u */
        strcpy(u1,*GetVex(G,u));
        for(w=FirstAdjVex(G,u1);w>=0;w=NextAdjVex(G,u1,strcpy(w1,*GetVex(G,w))))
          if(!visited[w]) /* w為u的尚未訪問的鄰接頂點 */
          {
            visited[w]=TRUE;
            Visit(G.vertices[w].data);
            EnQueue(&Q,w); /* w入隊 */
          }
      }
    }
  printf("\n");
}
開發者ID:Jzhi,項目名稱:C-repository,代碼行數:29,代碼來源:1-107.c

示例6: BFS

/*寬度優先*/ 
void BFS ( LGraph Graph, Vertex S)
{   
    Queue Q;     
    Vertex V;
    PtrToAdjVNode W; 
  
    InitializeQueue(&Q);
    /* 訪問頂點S:此處可根據具體訪問需要改寫 */
    printf("% d",S);
    Printed[S] = true; /*本例中表示該節點已被輸出*/
    Visited[S] = true; /* 標記S已訪問 */
    EnQueue(S,&Q); /* S入隊列 */
      
    while ( !QueueIsEmpty(&Q) ) {
        DeQueue(&V,&Q);  /* 彈出V */
        for( W=Graph->G[V].FirstEdge; W; W=W->Next ) /* 對圖中的每個頂點W */
            if ( !Visited[W->AdjV] ) {
                /* 訪問頂點W */
                printf("% d",W->AdjV);
                Printed[W->AdjV] = true; 
                Visited[W->AdjV] = true; 
                EnQueue(W,&Q); /* W入隊列 */
            }
    }
}
開發者ID:LiZeC123,項目名稱:C_and_CPP,代碼行數:26,代碼來源:鄰接表表示法.c

示例7: BFSTraversal

int BFSTraversal(GNode* graphRoot,int u,int v){

QNode* queue=CreateQueue(graphRoot->count);

EnQueue(queue,u);

int data;
ALNode* tmpNode;
while(!IsEmptyQueue(queue)){

data=DeQueue(queue);
if(visited[data]==0){
//printf("%d  ",data);
tmpNode=graphRoot->GArray[data]->head;
while(tmpNode){
    if(tmpNode->destination==v){
    return 1;
    }
if(visited[tmpNode->destination]==0){
EnQueue(queue,tmpNode->destination);
}
tmpNode=tmpNode->next;
}
visited[data]=1;
}


}

return 0;
}
開發者ID:sidpka,項目名稱:repo,代碼行數:31,代碼來源:Graph_Connectivity_CheckIfPathExistsBwTwoVertices.C

示例8: main

int main()
{
    int i;
    QElemType d;
    LinkQueue q;
    
    i=InitQueue(&q);
    if(i)
    printf("成功地構造了一個空隊列!\n");
    printf("是否空隊列?%d(1:空0:否)",QueueEmpty(q));
    printf("隊列的長度為%d\n",QueueLength(q));
    EnQueue(&q,-5);
    EnQueue(&q,5);
    EnQueue(&q,10);
    printf("插入3個元素(-5,5,10)後,隊列的長度為%d\n",QueueLength(q));
    printf("是否空隊列?%d(1:空0:否)",QueueEmpty(q));
    printf("隊列的元素依次為:");
    QueueTraverse(q);
    i=GetHead(q,&d);
    if(i==OK)
        printf("隊頭元素是:%d\n",d);
    DeQueue(&q,&d);
    printf("刪除了隊頭元素%d\n",d);
    i=GetHead(q,&d);
    if(i==OK)
        printf("新的隊頭元素是:%d\n",d);
    ClearQueue(&q);
    printf("清空隊列後,q.front=%uq.rear=%uq.front->next=%u\n",q.front,q.rear,q.front->next);
    DestroyQueue(&q);
    printf("銷毀隊列後,q.front=%uq.rear=%u\n",q.front,q.rear);
    
    return 0;
}
開發者ID:sunjiawe,項目名稱:MyC,代碼行數:33,代碼來源:main.c

示例9: while

void *pthr_rev()
{
    while(p_n_over)
    {
        if((Q_cmd.rear+1)%MAXQSIZE!=Q_cmd.front && (Q_respond.rear+1)%MAXQSIZE!=Q_respond.front)
        {
            if(-1==recv_serpkg_struct())
            {
                DEBUG_printf("Bad Package REV!\n");
                sleep(1);
                continue;
            }
            if(package.pkg_cmd[0]!='f')
            {
                DEBUG_printf("this is command\n");
                EnQueue(&Q_cmd,package);
                //sem_post(&q1_sem);
            }
            else
            {
                DEBUG_printf("this is respond \n");
                EnQueue(&Q_respond,package);
                //sem_post(&q2_sem);
            }
        }
        else
        {
            DEBUG_printf("the queue is full\n");
            sleep(5);
        }
    }
}
開發者ID:Spudz76,項目名稱:Antminer_firmware,代碼行數:32,代碼來源:client.c

示例10: BFSTraverse

int BFSTraverse(MGraph G,int(*Visit)(char v))
{
	LinkQueue Q;
	int v,w,u;
	for(v=0;v<G.vexnum;v++)
		visited[v]=0;
	InitQueue(Q);
	for(v=0;v<G.vexnum;v++)
	{
		if(!visited[v])
		{
			visited[v]=1;
			Visit(G.dingdian[v]);
			EnQueue(Q,v);
			while(!EmptyQueue(Q))
			{
				DeQueue(Q,u);
				w=FirstAdjVex(G,G.dingdian[u]);
				for(;w>=0;w=NextAdjVex(G,G.dingdian[u],G.dingdian[w]))
					if(!visited[w])
					{
						visited[w]=1;
						Visit(G.dingdian[w]);
						EnQueue(Q,w);
					}
			}
		}
	}
	return OK;
}
開發者ID:guanshuhuai,項目名稱:git_c_java,代碼行數:30,代碼來源:tu.cpp

示例11: BFSTraverse

Status BFSTraverse(MGraph G,Status(*Visit)(int v))
{
    Queue q;
    QElemType e;
    int i,j;

    for(i=0; i<G.vexnum; i++)
        Visited[i]=FALSE;

    if(!InitQueue(q))return ERROR;
    EnQueue(q,G.vexs[0]);//將第一個頂點入隊
    Visited[0]=TRUE;

    printf("廣度優先遍曆:");
    while(!QueueEmpty(q))
    {
        GetHead(q,e);
        i=LocateVex(G,e);
        for(j=0; j<G.vexnum; j++)
            if(G.arcs[i][j].adj!=0)
                if(!Visited[j])
                {
                    Visited[j]=TRUE;
                    EnQueue(q,G.vexs[j]);
                }
        DeQueue(q,e);
        Visit(e);
    }
    printf("\n");
    return OK;
}
開發者ID:geroge-gao,項目名稱:DataStructure,代碼行數:31,代碼來源:BFS.cpp

示例12: isCompleteBiTree

/**
 * 習題4.49,非遞歸法判定給定二叉樹是否為完全二叉樹
 */
bool isCompleteBiTree(BiTree T)
{
	LinkQueue Q;
	InitQueue(Q);
	BiTree p;
	int flag = 1;	//是否遍曆到達最後一層的標誌,到達最後一層則flag置0
	p = T;
	while (p || !QueueEmpty(Q)) {
		if (p) {
			if (p->lchild && p->rchild && 1 == flag) {	//左右孩子都存在
				EnQueue(Q, p->lchild);
				EnQueue(Q, p->rchild);
			} else if (p->lchild && !p->rchild && 1 == flag) {	//左孩子存在,右孩子不存在,到達最後一層
				flag = 0;
				EnQueue(Q, p->lchild);
			} else if (!p->lchild && p->rchild)	//左孩子不存在,右孩子存在,結束
				return false;
			else if (!p->lchild && !p->rchild)	//左右孩子都不存在
				flag = 0;
			else
				return false;

			if (!QueueEmpty(Q))
				DeQueue(Q, p);
			else
				return true;
		}
	}
	return true;
}
開發者ID:Annie2333,項目名稱:DS_Code,代碼行數:33,代碼來源:practice.cpp

示例13: LevelOrderTraversal

void LevelOrderTraversal(struct TNode* root,int n){

if(!root){
return;
}

QNode* queue=CreateQueue(n);
EnQueue(queue,root);

struct TNode* tmpNode;

while(!IsEmptyQueue(queue)){

tmpNode=DeQueue(queue);
if(tmpNode){
printf("%d   ",tmpNode->data);
}
if(tmpNode->left){
EnQueue(queue,tmpNode->left);
}
if(tmpNode->right){
EnQueue(queue,tmpNode->right);
}

}




}
開發者ID:sidpka,項目名稱:repo,代碼行數:30,代碼來源:BT_SumTree.C

示例14: MapQueueMove

/* 
** MapQueueMove
** 
** Applies a function to each element in a queue.  If the function returns
** moveVal, it enqueues the element to q2, otherwise it requeues it to 
** the original queue.
*/
int MapQueueMove(QUEUE q, int (*pFunc)(void *, void**), void **argv, 
		 int moveVal, QUEUE q2) 
{
void *item;
int count = QueueCount(q);
int status = SUCCESS;

TypeCheck(q,TYPE_QUEUE);
TypeCheck(q2,TYPE_QUEUE);
assert(! IS_ERROR(moveVal));
while (count--)
   {
   item = DeQueue(q);
   if (NULL == item)
      return(-1);
   status = (*pFunc)(item,argv);
   if (IS_ERROR(status))
      return(status);
   if (status == moveVal)
      status = EnQueue(q2,item);
   else
      status = EnQueue(q,item);
   if (IS_ERROR(status))
      return(status);
   }
return(status);
}
開發者ID:huilang22,項目名稱:Projects,代碼行數:34,代碼來源:queue.c

示例15: BFSTraverse

/*-----------------------------------
    Breadth_First_Search
-----------------------------------*/
void BFSTraverse(MGraph G)
{
	int i, j;
	LinkQueue Q;

	for(i=0; i<G.numVertexs; i++)
		visited[i] = FALSE;
	InitQueue(&Q);
	for(i=0; i<G.numVertexs; i++)
	{
		if(visited[i] == TRUE)				//頂點是否已經被訪問過
			continue;
		visited[i] = TRUE;
		printf("visited %c\n", G.vex[i]);	//訪問頂點,或者進行其他操作
		EnQueue(&Q, i);						//該頂點序號入隊列

		//當前隊列不為空時,一直遍曆
		while(QueueLength(Q)>0)
		{
			DeQueue(&Q,&i);					//出隊列,得到出來的頂點的序號
			for(j=0; j<G.numVertexs; j++)
			{
				if((G.edge[i][j]!=0 || G.edge[i][j]!=INFINITY) && (visited[j]==FALSE))
				{
					printf("visited %c\n", G.vex[j]);
					visited[j] = TRUE;
					EnQueue(&Q, j);			//與i頂點相連的頂點j入隊列
				}
			}
		}
	}

}
開發者ID:azengzz,項目名稱:py_exercise_MyNote,代碼行數:36,代碼來源:MiniSpanTree_Prim.c


注:本文中的EnQueue函數示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。