今天开启算法专栏
今天来看看 一种数据结构:队列
本篇使用数组实现
类似于柜台办理业务,前面的先服务,服务完了后面的接着来。
先来后到,先进先出。
数据结构栈才是先进后出
首先看一下简单的队列数据结构
DataType 类型是int的别名
queue里面存储客户,front负责指向当前的头部,rear指向当前的尾部,宏MAX_SIZE是队列最大长度。
1.初始化队列
头尾指针位置都设置为0
void initQueue(SeqQueue *SQ)
{
SQ->front = SQ->rear = 0;
}
2.检查队列是否为空
当这两个指针相等了说明队列目前就是空的
bool isEmpty(SeqQueue *SQ)
{
if(SQ->front == SQ->rear)
{
return true;
}
return false;
}
3.队列是否满了
当rear等于MAX_SIZE就满了
完整代码实现
#include#include using namespace std; #define MAX_SIZE 5 typedef int DataType; // 队列元素 typedef struct _Queue { DataType queue[MAX_SIZE]; int front; int rear; }SeqQueue; // 初始化 void initQueue(SeqQueue *SQ) { SQ->front = SQ->rear = 0; } bool isEmpty(SeqQueue *SQ) { if(SQ->front == SQ->rear) { return true; } return false; } bool isFull(SeqQueue *SQ) { if(SQ->rear == MAX_SIZE) { return true; } return false; } // 入队 bool enterQueue(SeqQueue *SQ,DataType data) { if(isFull(SQ) || !SQ) { cout << "isFull true" << endl; return false; } SQ->queue[SQ->rear] =data; SQ->rear++; return true; } // 出队 bool DeleQueue(SeqQueue *SQ,DataType *data) { if(!SQ || isEmpty(SQ)) { cout << "Queuq NULL" << endl; return false; } if(!data) return false; *data = SQ->queue[SQ->front]; for(int i=SQ->front+1;i rear; ++i ) // 前移 { SQ->queue[i-1] = SQ->queue[i]; } SQ->rear--; // 队尾前移 return true; } void printQueue(SeqQueue *SQ) { if(!SQ) return ; int i = SQ->front; while(i < SQ->rear) { cout << SQ->queue[i] << " "; i++; } cout << endl; } int main(void) { SeqQueue *SQ = new SeqQueue; DataType data = -1; initQueue(SQ); for(int i = 0;i < 7; ++i) { cout << "第" << i+1 << "次 " << enterQueue(SQ,i); cout << endl; } printQueue(SQ); cout << "-----------------出队---------------------------" << endl; for(int i=0; i< 5; ++i) { if(DeleQueue(SQ,&data)) { cout << "出队成功" << endl; } else { cout << "出队失败" << endl; } } printQueue(SQ); delete SQ; system("pause"); }



