C语言队列简介
队列是一种线性数据结构,它按照特定规则来存储和操作数据。队列具有先进先出(FIFO)的特点,也就是说,在一个非空队列中,最早加入的元素现在是最优先被访问或处理的。
在C语言中实现队列需要用到指针和动态内存分配。常见的基本操作包括:入队、出队、判断是否为空以及获取头部元素等。
关于队列的概念,就像排队买东西或是领票一样。队列也是一种数据结构,在计算机中很常用。在这里我会给你提供一个使用 C 语言实现基本操作的教程以及几个相应案例程序。
案例
首先我们需要定义一个 Queue 的结构体:
#include <stdio.h>
#define MAXSIZE 100
struct Queue {
int front;// 队首
int rear; // 队尾
int data[MAXSIZE]; // 存储元素的数组
};
接下来,让我们初始化这个 Queue:
void initQueue(struct Queue *q) {
q->front = 0;
q->rear = 0;
}
其次我们可以通过以下代码判断队列是否为空:
int emptyQueue(struct Queue *q) {
return (q->front == q->rear);
}
然后我们写入添加元素到队列末尾的函数:
void enqueue(struct Queue* q, int x) {
if(q->rear>=MAXSIZE){
printf("queue overflow\n");
return;
}
(q -> data)[(q -> rear++)] = x;
}
并且编写删除数据从头部出口移除时返回数据内容.
int dequeue(struct Queue* q){
if(emptyQueue(q)){
printf ("queue underflow\n ");
return -1;
}else{
++(q -> front);
return (q -> data[q -> front-1]);
}
}
让我们看一下一个基本案例:如何在队列中保存、添加和解除整数
#include <stdio.h>
#define MAXSIZE 100
struct Queue {
int front;
int rear;
int data[MAXSIZE]; };
void initQueue(struct Queue *q) {
q->front = 0;
q->rear= 0;
}
int emptyQueue(struct Queue* q){
return (q -> front == q -> rear);
}
void enqueue(struct Queue* q, int x){
if(q->rear>=MAXSIZE){
printf("queue overflow\n");
return;
}
(q->data)[(q ->rear++)] = x;// 排队领取号码,放入内容是整数字型
}
int dequeue(struct Queue *q){
if(emptyQueue(q)){
printf ("queue underflow\n");
return -1; // not exist
}else{
++(q -> front);
return (q -> data[q->front-1]);
}
}
main(){
struct Queue myData[10];
for(int i=0;i<10;i++){
initQueue(&myData[i]);
enqueue (&myData[i],i); // 取出信息加进小排挡里去~
}
while(!emptyQueue(&myData[4])){
printf ("%d",dequeue(&myData[4]));
}
return ;
}
上述程序示例将输入为整数值的数据存储到十个不同的附属于结构体的队列之中。
程序执行流程循环地将第5个队列(亦即 myData[4] = {0,1,2,…}中的数据从头部移除,直到这个队列为空为止。