链式队列的实现

来源:互联网 发布:音频算法工程师招聘 编辑:程序博客网 时间:2024/05/16 18:36

链式队列数据结构如下:

typedef struct qnode{ElemType data;           struct qnode* next;   //指向下一节点指针 }QNode;typedef struct{QNode* front;     //队首指针 QNode* rear;      //队尾指针 }ListQueue;

实现以下函数:

void InitQueue(ListQueue* &q);    //初始化队列 void ClearQueue(ListQueue* &q);   //清空队列 int QueueEmpty(ListQueue* q);    //判断队列是否为空 int QueueLength(ListQueue* q);   //求队列长度 void enQueue(ListQueue* &q,ElemType e);  //元素入队 int deQueue(ListQueue* &q,ElemType &e);  //元素出队 void DispQueue(ListQueue* q);    //输出队列 

具体实现代码:

#include <stdio.h>#include <stdlib.h>#include <iostream>#define ElemType int #define MaxSize 5#define SWAP(A,B) a^=b;b^=a;a^=b #define GET_ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0]))using namespace std;typedef struct qnode{ElemType data;           struct qnode* next;   //指向下一节点指针 }QNode;typedef struct{QNode* front;     //队首指针 QNode* rear;      //队尾指针 }ListQueue;void InitQueue(ListQueue* &q);    //初始化队列 void ClearQueue(ListQueue* &q);   //清空队列 int QueueEmpty(ListQueue* q);    //判断队列是否为空 int QueueLength(ListQueue* q);   //求队列长度 void enQueue(ListQueue* &q,ElemType e);  //元素入队 int deQueue(ListQueue* &q,ElemType &e);  //元素出队 void DispQueue(ListQueue* q);    //输出队列 void InitQueue(ListQueue* &q){q=(ListQueue* )malloc(sizeof(ListQueue));q->front=q->rear=NULL;}void ClearQueue(ListQueue* &q){ QNode* p=q->front; QNode* r; while(p->next!=NULL){ r=p->next; free(p); p=r; } free(p); free(q);}int QueueEmpty(ListQueue* q){return (q->front==NULL); }  int QueueLength(ListQueue* q){QNode* p=q->front;int count=0;while(p!=NULL){p=p->next;count++;}return count;}void DispQueue(ListQueue* q){QNode* p=q->front;while(p!=NULL){cout<<p->data<<" ";p=p->next;}cout<<endl;}void enQueue(ListQueue* &q,ElemType e){QNode* add=(QNode* )malloc(sizeof(QNode));add->data=e;add->next=NULL;if(q->front==NULL){q->front=add;q->rear=add;}else{q->rear->next=add;q->rear=add;}}int deQueue(ListQueue* &q,ElemType &e){QNode* p=q->front;if(q->front==NULL)return 0;else{e=q->front->data;q->front=p->next;if(q->front==NULL)q->rear=NULL;free(p);return 1;}}int main(){ListQueue* q=NULL;int a[]={1,2,3,4};InitQueue(q);for(int i=0;i<GET_ARRAY_LENGTH(a);i++){enQueue(q,a[i]);DispQueue(q);}deQueue(q,a[0]);deQueue(q,a[0]);enQueue(q,a[0]);DispQueue(q);for(int i=0;i<GET_ARRAY_LENGTH(a);i++){deQueue(q,a[i]);DispQueue(q);}return 0;}

运行结果:


0 0
原创粉丝点击