①基本定义
队列是一种操作受限的线性表,和栈的一端不允许操作不同,队列的两端都可进行操作,而且只能是一端进(插入操作),另一端出(删除操作)。进行插入操作的一端称为队尾,进行删除操作的一端称为队首或队头。新元素进队后便成为新的队尾元素(栈的新元素进入则是栈顶元素),元素出队后,其后继元素成为新的队首元素。
所以,队列又称为先进先出表。
采用顺序存储结构的队列称为顺序队。
②存储方式与结构
③实现
队空的条件为q->front = q->rear,进队时队尾指针rear加1,队满时q->rear == MAX-1(存放元素数组的最大下标)
#include <iostream> #include <cstdlib> using namespace std; #define MaxSize 50 typedef int ElemType; typedef struct { ElemType data[MaxSize]; int front,rear; //队头和队尾指针 }SqQueue; //顺序队类型 /*****初始化队列*****/ void InitQueue(SqQueue * &q) { q=(SqQueue *)malloc(sizeof(SqQueue)); q->front=q->rear=-1; } /*****销毁队列*****/ void DestroyQueue(SqQueue * &q) { free(q); } /*****判断队列是否为空*****/ bool QueueEmpty(SqQueue *q) { return (q->front==q->rear); } /*****进队列*****/ bool enQueue(SqQueue * &q,ElemType e) { if(q->rear==MaxSize-1) //队满上溢出 return false; q->rear++; //队尾增1 e=q->data[q->rear]=e; //rear位置插入元素e return true; } /*****出队列*****/ bool deQueue(SqQueue * &q,ElemType &e) { if(q->front==q->rear) //队空下溢出 return false; q->front++; e=q->data[q->front]; return true; } int main() { return 0; }---代码和部分内容参考自《数据结构教程》