数据结构-队列
队列数据数据结构就类似于,排队买火车票,其特性为先进先出,如下所示
这张图演示的是一开始是一个空队列,然后经过两次增加数据,两次删除数据,队列所出现的情况,而我在代码中使用的用数据实现的循环队列,这是实现队列的一种方式,当然还有其它的方式,我所实现的方式,仅供参考。下图演示了,增加循环队列增加与删除队列的状态。
其具体实现代码如下
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#define error INT_MIN//错误代码
#define input_size 5 //输入数据的个数
const int maxn=100;//队列的大小
int num[maxn]; //队列的空间
int top=-1,rear=0; //top为队首下标 rear为队尾下标 ,
//top记录第一个元素的下标,rear会随着数据的增加而变长
int push_queue(int val){//入队列
int temp=rear; //记录队列当前的下标,用于找到要插入数据的下标
if(top==rear)return error;//如果top==rear表示队列已满,返回错误代码
rear=(rear+1)%maxn;//增加一个数据,队尾下标需要增1,但因为是用数据实现,所以不能超过maxn
return num[temp]=val;//数据传入队列
}
int pop_queue(){//出队列
top=(top+1)%maxn; //因为初始top为-1,所以需要先加一
if(top==rear)return error;
return num[top]; //返回值
}
int main(){
int i,val;
for(i=0;i<input_size;i++){//输入数据
scanf("%d",&val);
push_queue(val);
}
for(i=0;i<input_size;i++){//输出数据
printf("%d ",pop_queue());
}
getchar();
return 0;
}