链式队列数据结构如下:
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; }
原文地址:http://blog.csdn.net/whu_sky/article/details/41150521