特点:先进先出
两类;数组队列和链队列
一.循环数组队列(循环队列比一般数组队列实用,所以这里用它举例子)
1.定义循环数组队列(计算机不会给你创建好)
typedef struct node{
int shuzi[5];
int rear,front;
}duilie; (英文不好,用拼音)
2.置空队列(电脑没那么勤快,给了你一块地,地上杂草的自己拔)
a->front = a->rear = 0;
3.判满(万一计算机开玩笑,给了你一块0平方米的地)
if((a->rear+1) % 5 == a->front){(这里的5的由来是定义了一个5个空间的数组)
return 0;(0为循环队列满了)
}
return 1;(1为循环队列没满)
4.入队
int i = 0;
for(;panman(a) != 0; a->rear++){
a->shuzi[a->rear] = i++;
}
5.判空
if(a->front == a->rear){
return 0;(0代表循环队列为空)
}
return 1;(1代表循环队列不为空)
6.出队
for(;pankong(a);a->front++){
printf("%d",a->shuzi[a->front]);
}
下面是入数字的循环队列的完整代码
#include <stdio.h>
typedef struct node{
int shuzi[5];
int rear,front;
}duilie;
void zhikong(duilie *a){
a->front = a->rear = 0;
}
int panman(duilie *a){
if((a->rear+1) % 5 == a->front){
return 0;
}
return 1;
}
void rudui(duilie *a){
int i = 0;
for(;panman(a) == 1; a->rear++){
a->shuzi[a->rear] = i++;
}
}
int pankong(duilie *a){
if(a->front == a->rear){
return 0;
}
return 1;
}
void chudui(duilie *a){
for(;pankong(a) == 1;a->front++){
printf("%d\n",a->shuzi[a->front]);
}
}
int main(){
duilie a;
zhikong(&a);
rudui(&a);
chudui(&a);
}
二.链队列
1.定义链队列
typedef struct node{
int shuzi;
struct node *next;
}liandui;
下面封装了rear,front;
typedef struct{
liandui *rear,*front;
}touwei;
2.创建头结点放置rear,front
a->front = (liandui*)malloc(sizeof(liandui));
a->rear = a->front;
a->front->next = NULL;
3.入队
liandui *b;
int i = 0;
for(i = 0; i < 10; i++){(此处的10表示10个入队,以此类推)
b = (liandui*)malloc(sizeof(liandui));
b->shuzi = i;
b->next = NULL;
a->rear->next = b;
a->rear = b;
}
4判空
if(a->front == a->rear){
return 0;(0代表队列空)
}
return 1;(1代表队列不为空)
5出队
for(;duikong(a);a->front = a->front->next){
printf("%d\n",a->front->shuzi);
}
下面是数字的演示的代码;
#include <stdio.h>
typedef struct node{
int shuzi;
struct node *next;
}liandui;
typedef struct{
liandui *rear,*front;
}touwei;
void tou(touwei *a){
a->front = (liandui*)malloc(sizeof(liandui));
a->rear = a->front;
a->front->next = NULL;
}
int duikong(touwei *a){
if(a->front == a->rear){
return 0;
}
return 1;
}
void rudui(touwei *a){
liandui *b;
int i = 0;
for(i = 0; i < 10; i++){
b = (liandui*)malloc(sizeof(liandui));
b->shuzi = i;
b->next = NULL;
a->rear->next = b;
a->rear = b;
}
}
void chudui(touwei *a){
a->front = a->front->next;
for(;duikong(a);a->front = a->front->next){
printf("%d\n",a->front->shuzi);
}
}
int main(){
touwei *a;
tou(&a);
rudui(&a);
chudui(&a);
}
以上讲解仅供参考,有疑问询问QQ1374487940