标签:als oid 初始化 iostream lib count false bool res
#include <iostream> #include <stdlib.h> using namespace std; /******************************* * * 链队列的结构实现 * *******************************/ typedef int QElemType; typedef struct QNode { QElemType data; struct QNode *next; }QNode, *QNodePtr; typedef struct { QNodePtr front; QNodePtr rear; }LinkQueue; /******************************* * * 链队列的操作实现 * *******************************/ /*初始化一个链队列*/ bool InitQueue(LinkQueue *lq) { cout << "Init LinkQueue ..." << endl; QNodePtr p = (QNodePtr)malloc(sizeof(QNode)); p->next = NULL; lq->front = lq->rear = p; return true; } /*插入元素e为Q的新的队尾元素*/ bool EnQueue(LinkQueue *lq, QElemType e) { QNodePtr s = (QNodePtr)malloc(sizeof(QNode)); if(!s) { exit(0); } s->data = e; s->next = NULL; lq->rear->next = s; lq->rear = s; return true; } /*删除队列的队头元素,用e返回其值*/ bool DeQueue(LinkQueue *lq, QElemType *e) { QNodePtr p = NULL; if(lq->front == lq->rear) { return false; } p = lq->front->next; *e = p->data; lq->front->next = p->next; if(p == lq->rear)/*若队头同时又是队尾,则删除后将rear指向头结点*/ { lq->rear = lq->front; } cout << "DeQueue Item: " << *e << endl; free(p); return true; } /*销毁队列,包括头结点*/ bool DestroyQueue(LinkQueue *lq) { cout << "Destroy Queue... " << endl; while(lq->front) { lq->rear = lq->front->next; free(lq->front); lq->front = lq->rear; } return true; } /*将队列清空,但是保留头结点*/ bool ClearQueue(LinkQueue *lq) { if(lq->front == lq->rear) { return true; } cout << "Clear Queue ..." << endl; QNodePtr p = lq->front->next; QNodePtr q = NULL; lq->front->next = NULL; lq->rear = lq->front; while(p) { q = p->next; free(p); p = q; } return true; } /*判断队列是否为空*/ bool IsEmptyQueue(LinkQueue lq) { return lq.front == lq.rear; } /*返回队列中结点的个数*/ int QueueLength(LinkQueue lq) { int count = 0; if(lq.front == NULL)//队列没有初始化 { return 0; } QNodePtr p = lq.front->next; while(p) { p = p->next; count++; } return count; } /*返回队列的队头元素*/ bool GetTop(LinkQueue *lq, QElemType *e) { QNodePtr p; if(lq->front == lq->rear) { return false; } p = lq->front->next; *e = p->data; cout << "Get Top Item: " << *e << endl; return true; } /*遍历队列中的各个元素*/ bool QueueTraverse(LinkQueue lq) { if(lq.front == lq.rear) { return false; } cout << "Queue Traverse ..." << endl; QNodePtr p = lq.front->next; while(p) { cout << p->data <<‘ ‘; p = p->next; } cout << endl; return true; } void main(void) { LinkQueue lq; InitQueue(&lq); for(int i = 0; i < 5; i++) { EnQueue(&lq, i); } QueueTraverse(lq); int result; GetTop(&lq, &result); DeQueue(&lq, &result); if(!IsEmptyQueue(lq)) { cout << "Queue Length: " << QueueLength(lq) << endl; } QueueTraverse(lq); DestroyQueue(&lq); return 0; }
标签:als oid 初始化 iostream lib count false bool res
原文地址:http://www.cnblogs.com/enyala/p/7730541.html