本文整理汇总了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;
}
示例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);
}
}
}
}
}
}
示例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);
}
}
}
}
}
}
示例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;
}
}
}
示例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");
}
示例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入队列 */
}
}
}
示例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;
}
示例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;
}
示例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);
}
}
}
示例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;
}
示例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;
}
示例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;
}
示例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);
}
}
}
示例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);
}
示例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入队列
}
}
}
}
}