链式队列数据结构如下:
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