队列的基本操作
队列是一种常见的数据结构,类似于现实生活中的排队概念。它按照先进先出(FIFO)的原则管理元素。在队列中,新元素从一端(通常称为队尾)添加,而现有元素从另一端(通常称为队首)移除。这意味着最先进入队列的元素最先被移出,保持了元素的顺序性。
队列的基本操作包括以下几种:
入队(enqueue): 将元素添加到队列的末尾(队尾)。
出队(dequeue): 从队列的开头(队首)移除并返回元素。
查看队首元素(peek): 查看队列开头处的元素,但不移除它。
判空(isEmpty): 检查队列是否为空。
获取队列长度(size): 返回队列中元素的数量。
这些基本操作使得可以有效地管理和操作队列中的元素,维护队列的顺序性,并允许对数据按照 FIFO 原则进行处理。
代码实现
//队列的基本操作
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100 //定义队列的最大容量
typedef struct{
int data[MAX_SIZE];
int front;
int rear;
}Queue;
//创建队列
Queue*createQueue(){
Queue*q=(Queue*)malloc(sizeof(Queue));
q->front=-1;
q->rear=-1;
return q;
}
//销毁队列
void destroyQueue(Queue*q){
free(q);
}
//清空队列
void clearQueue(Queue*q){
q->front=-1;
q->rear=-1;
}
//求队列长度
int queueLength(Queue*q){
return (q->rear-q->front+1);
}
//返回对头元素
int getFront(Queue*q){
if(q->front==-1){
printf("队列为空\n");
return -1;
}
return q->data[q->front];
}
//插入元素到对尾
void enqueue(Queue*q,int element){
if(q->rear==MAX_SIZE-1){
printf("队列已满\n");
return ;
}
if(q->front==-1){
q->front=0;
}
q->rear++;
q->data[q->rear]=element;
}
//删除对头元素
void dequeue(Queue*q){
if(q->front==-1){
printf("对头为空\n");
return ;
}
if(q->front==q->rear){
q->front=-1;
q->rear=-1;
}
else{
q->front++;
}
}
//将队列置空
void makeEmpty(Queue*q){
q->front=-1;
q->rear=-1;
}
//遍历队列
void traverseQueue(Queue*q){
if(q->front==-1){
printf("队列为空\n");
return ;
}
for(int i=q->front;i<=q->rear;i++){
printf("%d ",q->data[i]);
}
printf("\n");
}
//示例用法
int main(){
Queue*myQueue=createQueue();
enqueue(myQueue,10);
enqueue(myQueue,20);
enqueue(myQueue,30);
enqueue(myQueue,40);
printf("队列长度为:%d\n",queueLength(myQueue));
printf("队头元素: %d\n",getFront(myQueue));
dequeue(myQueue);
printf("删除对头后的队列长度:%d\n",queueLength(myQueue));
traverseQueue(myQueue);
makeEmpty(myQueue);
traverseQueue(myQueue);
destroyQueue(myQueue);
return 0;
}
运行效果