数据结构之链队列的实现
2014-04-26 23:19
387 查看
/**********************链队列********************/#include"stdio.h"#include"stdlib.h"#define ERROR 0#define OK 1#define FALSE 0#define TRUE 1typedef int ElemType;typedef int Status;typedef struct QNode{ElemType data;struct QNode *next;}QNode,*QueuePtr;typedef struct{QueuePtr front,rear;}LinkQueue;/*********************Operator***************/void InitQueue(LinkQueue *Q) //初始化队列{Q->front=Q->rear=NULL;}void ClearQueue(LinkQueue *Q) //清空队列{QueuePtr p;while(Q->front!=Q->rear){p=Q->front->next;Q->front->next=p->next;if(p==Q->rear) //当删除的是最后一个元素时,令头尾指针指向相同Q->rear=Q->front;free(p);}if(Q->front)free(Q->front);}void DestroyQueue(LinkQueue *Q) //销毁队列{ClearQueue(Q);free(Q);}Status EmptyQueue(LinkQueue Q) //判断队列是否为空{if(Q.front==NULL&&Q.rear==NULL)return TRUE;return FALSE;}int QueueLength(LinkQueue Q) //返回队列的长度{int count=0;QueuePtr p;while(Q.front!=Q.rear){p=Q.front;Q.front=p->next;count++;}return count;}Status EnQueue(LinkQueue *Q, ElemType e) //入队操作{QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));if(!p)exit(ERROR);p->data=e;p->next=NULL;if(EmptyQueue(*Q)) //让front与rear同时指向第一个结点Q->front=Q->rear=p;else{Q->rear->next=p;Q->rear=p;}return OK;}Status DeQueue(LinkQueue *Q,ElemType *e) //出队操作,将队头元素返回给e{QueuePtr p;if(EmptyQueue(*Q))return ERROR;p=Q->front->next;*e=p->data;Q->front->next=p->next;if(p==Q->rear) //当删除的是最后一个元素时,令头尾指针指向相同Q->rear=Q->front;free(p);return OK;}void PrintQueue(LinkQueue Q) //打印队列{QueuePtr p;p=Q.front;do{printf("%6d",p->data);p=p->next;}while(p!=Q.rear->next);printf("\n");}main(void){LinkQueue *Q;ElemType *e;Q=(LinkQueue*)malloc(sizeof(LinkQueue));e=(ElemType*)malloc(sizeof(ElemType));InitQueue(Q);EnQueue(Q,12);EnQueue(Q,13);EnQueue(Q,14);EnQueue(Q,15);EnQueue(Q,16);EnQueue(Q,17);printf("hello\n");PrintQueue(*Q);DeQueue(Q,e);PrintQueue(*Q);printf("%6d\n",*e);ClearQueue(Q);printf("asid\n");PrintQueue(*Q); //运行时此处为空链表 输出为随机地址printf("asid\n");}
相关文章推荐
- C++ 实现优先队列的简单实例
- 线程安全队列 采用双list实现
- 数据结构:循环队列--Java实现
- 实现链式队列
- MMF循环队列实现RPC
- 算法习题57:用两个栈实现队列
- 用两个栈实现一个队列
- Java队列实现
- 剑指offer 用两个栈实现队列
- Java优先级队列实现
- 实现进程内的消息队列——让请求排起队来
- 基于Django与Celery实现异步队列任务
- 使用memcache和redis实现队列
- 循环队列——队列的顺序表示和实现
- 剑指Offer-用两个栈实现队列
- 栈和队列的基本实现(数组实现和链表实现)
- 《剑指offer07——用两个栈实现队列》
- 【STL学习】优先级队列Priority Queue详解与C++编程实现
- PHP简单双向队列实现
- 每日一省————链表之队列的简单实现