什么是队列
队列就是排队,就像火车站排队买票一样,有头有尾,先到的先买。
一定是左边第1位的元素现出来,第7位的元素最后出来。
队列的特点
先进先出。
只允许在队列前端进行删除操作,在队尾进行插入操作。
需要的元素
- 头指针head
- 尾指针tail
- 存储数组
- 元素个数的标识count
队列空的时候
当队列为空的时候,头部指针和尾部指针一起指向第一个元素
判断两个指针是否相同
队列满地时候
当队列满地时候,头部指针指向第一个,尾部指针指向最后一个+1;
判断count是否为lenth就能判断队列是否已经满了。
C语言实现队列的方式
#include<stdio.h>
#include<stdlib.h>
#define LENGTH 10
/*定义一个队列结构体*/
typedef struct {
int num[LENGTH];//用数组存储
int *head;//头指针
int *tail;//尾指针
int count;//表示队列中有多少元素
}queue;
//判断队列是不是为空,如果元素个数为0,表示为空
int isEmpty(queue *q) {
if (q->head == q->tail) {
return 1;
}
else {
return 0;
}
}
//判断队列是不是已经满了,如果元素个数等于length,就是满了
int isFull(queue *q) {
if (q->count == LENGTH) {
return 1;
}
else {
return 0;
}
}
//给队列插入数据,只能插到尾部
void insert(queue *q, int n) {
if (!isFull(q)) {
*(q->tail) = n;//放到尾部指针指向的位置
q->tail++;//尾部指针向后移一位
q->count++;//元素个数加1
}
}
//队列删除元素,只能是头部删除
int delete(queue *q) {
if (!isEmpty(q)) {
int temp = *(q->head);
q->head++;
return temp;
}
else {
return 65535;
}
}
int main()
{
queue q;
q.head = q.tail = &q.num[0];
q.count = 0;
insert(&q, 2);//插入
insert(&q, 3);
insert(&q, 4);
int res = delete(&q);//删除
printf("%d", res);//输出为2
}
c++实现队列
#include<iostream>
using namespace std;
#define LENGTH 10
//定义一个队列类
class Queue {
public:
int num[LENGTH];//数组存储
int *head;//头部指针
int *tail;//尾部指针
int count;//元素个数
bool isEmpty();//判断是都为空
bool isFull();//判断是都满了
void insert(int n);//插入操作
int del();//删除操作
Queue();//构造函数
};
//成员函数的实现
Queue::Queue() {
head = tail = &num[0];
count = 0;
}
bool Queue::isEmpty()
{
if (this->head == this->tail) {
return true;
}
else {
return false;
}
}
bool Queue::isFull()
{
if (this->count == LENGTH) {
return true;
}
else {
return false;
}
}
void Queue::insert(int n) {
if (!this->isFull()) {
*(this->tail) = n;
this->tail++;
this->count++;
}
else {
cout << "queue is full!" << endl;
}
}
int Queue::del() {
if (!this->isEmpty()) {
int temp = *(this->head);
(this->head)++;
return temp;
}
else {
return 4294967295;
}
}
int main()
{
Queue q;
q.insert(2);
q.insert(5);
q.insert(7);
int res = q.del();
cout << res << endl;
}