队列

特点:先进先出

两类;数组队列和链队列

一.循环数组队列(循环队列比一般数组队列实用,所以这里用它举例子)

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

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值