队列(Queue)是一种数据结构,可以在队列的一端插入元素而在队列的另一端删除元素,它有以下特点:
1、允许删除的一端称为队头(front);
2、允许插入的一端称为队尾(reat);
3、当队列中没有元素时称为空队列;
4、当队列中只有一个元素时,队头和队尾指向的节点都是同一个;
5、队列亦称为先进先出(First In First Out)的线性表,简称为FIFO表。队列的修改根据是先进先出的原则,新来的成员总是加入队尾(即不能中间插入),每次离开的成员总是队头才成员(不允许中间离队)。
下面是代码实现:
//
// Queue.h
// C++_Test001
//
// Created by TUSM on 14-11-15.
// Copyright (c) 2014年 CXM. All rights reserved.
//
#ifndef C___Test001_Queue_h
#define C___Test001_Queue_h
#include <iostream>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}Node;
typedef struct queue
{
node *front;
node *rear;
}Queue;
Queue *creatQueue();
Queue *enqueue(Queue *q, int data);
Queue *dequeue(Queue *q);
int length(Queue *q);
void print(Queue *q);
#endif
//
// Queue.cpp
// C++_Test001
//
// Created by TUSM on 14-11-15.
// Copyright (c) 2014年 CXM. All rights reserved.
//
#include "Queue.h"
using namespace std;
Queue *creatQueue()
{
Queue *pQueue = NULL;
pQueue = (Queue *)malloc(sizeof(Queue));
pQueue->front = NULL;
pQueue->rear = NULL;
return pQueue;
}
Queue *enqueue(Queue *q, int data)
{
node *pNew = NULL;
pNew = (Node *)malloc(sizeof(Node));
pNew->data = data;
pNew->next = NULL;
if (q->rear == NULL)
{
q->front = q->rear = pNew;
}
else
{
q->rear->next = pNew;
q->rear = pNew;
}
return q;
}
Queue *dequeue(Queue *q)
{
Node *pNode = NULL;
pNode = q->front;
if (pNode == NULL)
{
cout << "queue is empty" << endl;
return NULL;
}
else
{
q->front = q->front->next;
if (q->front == NULL)
{
q->rear = NULL;
}
free(pNode);
}
return q;
}
int length(Queue *q)
{
int len = 0;
Node *pNode = q->front;
if (pNode == NULL)
{
return len;
}
else
{
len = 1;
while (pNode != q->rear)
{
pNode = pNode->next;
len ++;
}
}
return len;
}
void print(Queue *q)
{
Node *pNode = NULL;
pNode = q->front;
if (pNode == NULL)
{
cout << "queue is empty" << endl;
return;
}
while (pNode != q->rear)
{
cout << "data:" << pNode->data << endl;
pNode = pNode->next;
}
cout << "data:" << pNode->data << endl;
cout << endl;
}