學個二叉樹,又要用上隊列的代碼,上學期學的隊列忘光光了,這不沒辦法回來復習咯
?代碼:
#include <stdio.h>
#include <stdlib.h>typedef int ElemType;
typedef struct LinkNode{ElemType data;struct LinkNode *next;
}LinkNode;
typedef struct{LinkNode *front,*rear; // 鏈表頭,鏈表尾,也可以稱隊頭,隊尾
}LinkQueue; //先進先出//隊列的初始化,使用的是帶頭結點的鏈表來實現的
void InitQueue(LinkQueue &Q)
{Q.front=Q.rear= (LinkNode *)malloc(sizeof(LinkNode));Q.front->next=NULL;
}
//入隊
void EnQueue(LinkQueue &Q,ElemType x)
{LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode));s->data=x;s->next=NULL;Q.rear->next=s; //rear始終指向尾部Q.rear=s;
}
//出隊 頭部刪除法
bool DeQueue(LinkQueue &Q,ElemType &x)
{if(Q.front==Q.rear)return false; //隊列為空LinkNode *q=Q.front->next; //頭結點什么都沒存,所以頭結點的下一個結點才有數據if(Q.rear==q){x=q->data;Q.rear=Q.front; //如果只有一個結點}else{x=q->data;Q.front->next=q->next; //斷鏈}free(q);return true;
}
//通過鏈表來實現隊列
int main()
{LinkQueue Q;//入隊InitQueue(Q); //初始化隊列EnQueue(Q,3);EnQueue(Q,4);EnQueue(Q,5);EnQueue(Q,6);EnQueue(Q,7);//出隊ElemType element; //存儲出隊元素bool ret;ret= DeQueue(Q,element);if(ret)printf("DeQueue success,element=%d\n",element);elseprintf("Dequeue fail\n");return 0;
}
運行:
DeQueue success,element=3