链式队列操作,初始化,入队,出队

来源:互联网 发布:php use继承 编辑:程序博客网 时间:2024/03/29 01:10
#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>#define OK        1#define OVERFLOW -1#define TRUE      1#define FALSE     0#define ERROR     0typedef int QElemType;typedef int Status;typedef struct QNode{QElemType data;QNode *next;}*QueuePtr;struct LinkQueue{QueuePtr front, rear;};Status InitQueue(LinkQueue &Q){if (!(Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode))))exit(OVERFLOW);Q.front -> next = NULL;return OK;};Status DestoryQueue(LinkQueue &Q){while(Q.front){Q.rear = Q.front->next;free(Q.front);Q.front = NULL;Q.front = Q.rear;}return OK;}Status ClearQueue(LinkQueue &Q){QueuePtr q,p;Q.rear = Q.front;p = Q.front->next;Q.front->next = NULL;while(p){q = p->next;free(p);p = q;}return OK;}Status QueueEmpty(LinkQueue Q){if (Q.front->next == NULL)return TRUE;elsereturn FALSE;}Status QueueLength(LinkQueue Q){int i = 0;QueuePtr p;p = Q.front->next;while(p){++i;p = p->next;}return i;}Status GetHead(LinkQueue Q,QElemType &e){QueuePtr p;if(Q.front == Q.rear)return ERROR;p = Q.front->next;e = p->data;return OK;}Status EnQueue(LinkQueue &Q,QElemType e){QueuePtr p;p = (QueuePtr)malloc(sizeof(QNode));if(!p) return OVERFLOW;p->data = e;Q.rear->next = p;Q.rear = p;p->next = NULL;return OK;}Status DeQueue(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;free(p);return OK;}Status QueueTraverse(LinkQueue Q,void(*visit)(QElemType)){QueuePtr q;q = Q.front->next;while(q){visit(q->data);q = q->next;}printf("\n");return OK;}void visit(QElemType e){printf("%d ",e);}int main(){int i;QElemType e;LinkQueue q;i = InitQueue(q);if(i)printf("Create empty queue successfully!\n");printf("Is it empty? %d(1:Yes 0:NO)\n",QueueEmpty(q));printf("The length of queue is %d\n",QueueLength(q));EnQueue(q,-5);EnQueue(q,5);EnQueue(q,10);printf("After insert three element(-5,5,10),the length of queue is %d.\n",QueueLength(q));printf("Is it empty? %d.(1:YES 0:NO)\n",QueueEmpty(q));printf("The element of queue are\n");QueueTraverse(q,visit);i = GetHead(q,e);if(i == OK)printf("the head element is %d\n",e);ClearQueue(q);printf("After clear queue,q.front=%#p q.rear=%#p q.front->next=%u\n",q.front,q.rear,q.front->next);DestoryQueue(q);printf("After destory queue,q.front=%#p q.rear=%#p\n",q.front,q.rear);return 0;}

原创粉丝点击