一、队列的基本概念
概念:队列是一种先进先出的数据结构,他有两个开口
特点:队列容器允许从一端新增元素 从另一端移除元素
队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为
队列中进数据称为---入队 push
队列中出数据称为---出队 pop
队列属于受限线性表
如图所示:
二、队列的顺序存储
概念:
所谓队列的顺序存储,即利用数组模拟出队列的先进先出的数据结构。
思考:
如何用代码设计存储队列容器,可以存放整型数据,并满足队列的特性?
入队出队参考代码:
#define MAX 1000
//队列的结构体
typedef struct Queue{
int data[MAX]; //队列内部真实的结构、数组模拟
int size; //队列的大小
}Queue,*seqQueue;
//初始化队列
seqQueue init_seqQueue(){
//分配内存空间
seqQueue queue = (Queue *)malloc(sizeof(struct Queue));
if(queue == NULL){
return NULL;
}
//初始化队列大小
queue->size = 0;
//清空队列中所有元素
for(int i = 0;i < MAX; i++){
queue->data[i] = 0;
}
return queue;
}
//入队
void push_seqQueue(seqQueue queue,int data){
//本质 尾插
if(queue == NULL){
return;
}
if (queue->size == max){
printf("队满,无法入队\n");
return;
}
queue->data[queue->size] = data;
//更新队列大小
queue->size++;
}
//出队
void pop_seqQueue (seqQueue queue){
//本质 头删
if(queue == NULL){
return;
}
if(queue->size == 0){
printf("队列已空,无法出队!\n");
return;
}
for(int i=0;i<queue->size-1;i++){
queue -> data[i] = queue->data[i+1];
}
//更新队列大小
queue->size++;
}