本文共 1856 字,大约阅读时间需要 6 分钟。
#include#include #define OK 1#define ERROR -1typedef int QElemType;typedef int Status;typedef struct QNode{ QElemType data; struct QNode *next;}QNode;typedef QNode* QueuePtr;typedef struct { QueuePtr front;/*头指针*/ QueuePtr rear;/*尾指针*/}LinkQueue;/*队列的链式存储*//* *初始化链队Q */Status InitQueue(LinkQueue *Q){ (*Q).front = (*Q).rear = (QueuePtr)malloc(sizeof(QNode)); if(!(*Q).front) exit(0); (*Q).front->next = NULL; return OK;}/* *置空链队Q */void ClearQueue(LinkQueue *Q){ (*Q).rear = (*Q).front->next; while ((*Q).rear) { (*Q).front->next = (*Q).rear->next; free((*Q).rear); (*Q).rear = (*Q).front->next; } (*Q).rear = (*Q).front;}/* *销毁链队Q */void DestroyQueue(LinkQueue *Q){ while ((*Q).front) { (*Q).rear = (*Q).front->next; free((*Q).front); (*Q).front = (*Q).rear; }}/* *判断链队Q是否为空 */Status QueueEmpty(LinkQueue Q){ if(Q.front==Q.rear) return true; else { return false; }}/* *返回链队Q的元素个数 */Status QueueLength(LinkQueue Q){ int count = 0; QueuePtr p = Q.front; while(p!=Q.rear) { count++; p = p->next; } return count;}/* *获取链队Q的队头元素 */Status GetHead_Queue(LinkQueue Q,QElemType *e){ QueuePtr p; if (Q.front==Q.rear) { return ERROR; } p = Q.front->next; *e = p->data; return OK;}/* *元素e入队 */Status In_Queue(LinkQueue *Q,QElemType e){ QueuePtr p; p = (QueuePtr)malloc(sizeof(QNode)); if(!p) exit(0); p->data = e; p->next = NULL; (*Q).rear->next = p; (*Q).rear = p; return OK;}/* *元素e出队 */Status Out_Queue(LinkQueue *Q,QElemType *e){ QueuePtr p; if((*Q).front==(*Q).rear) return ERROR; p = (*Q).front->next; *e = p->data; (*Q).front->next = p->next; if((*Q).rear==p) (*Q).rear = (*Q).front; free(p); return OK;}/* *访问队列 */void QueueTraverse(LinkQueue Q,void(Visit)(QElemType)){ QueuePtr p; p = Q.front->next; while (p) { Visit(p->data); p = p->next; }}```
转载地址:http://lwywi.baihongyu.com/