当前位置: 首页>>代码示例>>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;未经允许,请勿转载。