队列最基本的属性时先进先出,后进后出
下面是通过C++实现队列:
#include<iostream>
using namespace std;
// 链式结构:表示队列
class QNode
{
public: QNode* _pNext;
int _data;
};
// 队列的结构
class Queue
{
public: QNode* head;
QNode* end;
};
// 初始化队列
void QueueInit(Queue* q);
// 队尾入队列
void QueuePush(Queue* q, int data);
// 队头出队列
void QueuePop(Queue* q);
// 获取队列头部元素
int QueueFront(Queue * q);
// 获取队列队尾元素
int QueueBack(Queue* q);
// 获取队列中有效元素个数
int QueueSize(Queue* q);
// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
int QueueEmpty(Queue* q);
// 销毁队列
void QueueDestroy(Queue* q);
#include"QListNode.h"
#include<assert.h>
// 初始化队列
void QueueInit(Queue* q)
{
assert(q);
q->head = NULL;
q->end = NULL;
}
// 队尾入队列
void QueuePush(Queue* q, int data)
{
if (q->head == NULL)
{
QNode* q1=new QNode;
q1->_data = data;
q1->_pNext = NULL;
q->head = q1;
q->end = q1;
}
else
{
QNode* q2 = new QNode;
q2->_data = data;
q2->_pNext = NULL;
q->end->_pNext = q2;
q->end = q2;
}
}
// 队头出队列
void QueuePop(Queue* q)
{
if (QueueEmpty(q) == 0)
{
return;
}
QNode* next = q->head->_pNext;
free(q->head);
q->head =next;
}
// 获取队列头部元素
int QueueFront(Queue* q)
{
if (q->head == NULL)
{
return 0;
}
return q->head->_data;
}
// 获取队列队尾元素
int QueueBack(Queue* q)
{
if (q->end == NULL)
{
return NULL;
}
return q->end->_data;
}
// 获取队列中有效元素个数
int QueueSize( Queue* q)
{
if (QueueEmpty(q) == 0)
{
return 0;
}
int number = 0;
QNode* p=q->head;
while (p->_pNext!=NULL)
{
number++;
p = p->_pNext;
}
return ++number;
}
// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
int QueueEmpty(Queue* q)
{
if (q->head == NULL)
{
return 0;
}
else
return 1;
}
// 销毁队列
void QueueDestroy(Queue* q)
{
while (q->head->_pNext != NULL)
{
QNode* next = q->head->_pNext;
free(q->head);
q->head =next;
}
q->head = NULL;
q->end = NULL;
}
int main()
{
Queue q;
QueueInit(&q);
QueuePush(&q, 9);
QueuePush(&q, 8);
QueuePush(&q, 7);
QueuePush(&q, 6);
QueuePush(&q, 5);
QueuePop(&q);
QueueDestroy(&q);
cout<<QueueEmpty(&q);
cout << QueueFront(&q) << endl;
cout << QueueBack(&q) << endl;
cout <<QueueSize(&q) << endl;
}
下面是其各方法:
// 初始化队列
void QueueInit(Queue* q);
// 队尾入队列
void QueuePush(Queue* q, int data);
// 队头出队列
void QueuePop(Queue* q);
// 获取队列头部元素
int QueueFront(Queue * q);
// 获取队列队尾元素
int QueueBack(Queue* q);
// 获取队列中有效元素个数
int QueueSize(Queue* q);
// 检测队列是否为空,如果为空返回非零结果,如果非空返回0
int QueueEmpty(Queue* q);
// 销毁队列
void QueueDestroy(Queue* q);
1.void QueueInit(Queue* q);
// 初始化队列
void QueueInit(Queue* q)
{
assert(q);
q->head = NULL;
q->end = NULL;
}
2.void QueuePush(Queue* q, int data);
void QueuePush(Queue* q, int data)
{
if (q->head == NULL)
{
QNode* q1=new QNode;
q1->_data = data;
q1->_pNext = NULL;
q->head = q1;
q->end = q1;
}
else
{
QNode* q2 = new QNode;
q2->_data = data;
q2->_pNext = NULL;
q->end->_pNext = q2;
q->end = q2;
}
}
3.void QueuePop(Queue* q);
void QueuePop(Queue* q)
{
if (QueueEmpty(q) == 0)
{
return;
}
QNode* next = q->head->_pNext;
free(q->head);
q->head =next;
}
4.int QueueFront(Queue * q);
int QueueFront(Queue* q)
{
if (q->head == NULL)
{
return 0;
}
return q->head->_data;
}
5.int QueueBack(Queue* q);
int QueueBack(Queue* q)
{
if (q->end == NULL)
{
return NULL;
}
return q->end->_data;
}
6.int QueueSize(Queue* q);
int QueueSize( Queue* q)
{
if (QueueEmpty(q) == 0)
{
return 0;
}
int number = 0;
QNode* p=q->head;
while (p->_pNext!=NULL)
{
number++;
p = p->_pNext;
}
return ++number;
}
7.int QueueEmpty(Queue* q);
int QueueEmpty(Queue* q)
{
if (q->head == NULL)
{
return 0;
}
else
return 1;
}
8. void QueueDestroy(Queue* q);
void QueueDestroy(Queue* q)
{
while (q->head->_pNext != NULL)
{
QNode* next = q->head->_pNext;
free(q->head);
q->head =next;
}
q->head = NULL;
q->end = NULL;
}