本文整理匯總了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入隊列
}
}
}
}
}