一、顺序存储结构实现
与栈类似,队列也是最简单的数据结构。用顺序存储和链式存储都能实现,但是需要注意的是由于队列是先进先出的,所以队首位置不能超过队尾指针,且当索引超过最大队列长度时,需要使用循环队列。
(1)结构体中定义数组
/* CreateQueue/IsEmpty/IsFull/AddElement/DeleteElement */
#include "stdbool.h"
#include "stdlib.h"
#include "stdio.h"
#define MAX_DATA_NUM 100
typedef struct {
int front;
int rear;
int data[MAX_DATA_NUM];
} Queue;
Queue* CreateQueue(void)
{
Queue* qe = (Queue*)malloc(sizeof(Queue));
if (qe == NULL) {
printf("Queue creation failed!\n");
return NULL;
}
qe->front = 0;
qe->rear = 0;
for (int i = 0; i < MAX_DATA_NUM; i++) {
qe->data[i] = 0;
}
return qe;
}
bool IsEmpty(Queue* qe)
{
if (qe->front == qe->rear) {
printf("Queue is empty!\n");
return true;
}
return false;
}
bool IsFull(Queue* qe)
{
if (qe->rear >= MAX_DATA_NUM) {
printf("Queue is full!\n");
return true;
}
return false;
}
bool AddElement(Queue* qe, int data)
{
if (IsFull(qe) == true) {
printf("Add element failed! Queue is full!\n");
return false;
}
qe->data[qe->rear] = data;
qe->rear++;
return true;
}
int DeleteElement(Queue* qe)
{
if (IsEmpty(qe) == true) {
printf("Delete element failed! Queue is empty!\n");
return INT_MAX;
}
int result = qe->data[qe->front];
qe->front++;
return result;
}
void VisitQueue(Queue* qe)
{
for (int i = qe->front; i < qe->rear; i++) {
printf("%d ", qe->data[i]);
}
printf("\n");
return ;
}
void main(void)
{
Queue* qe = CreateQueue();
IsEmpty(qe);
AddElement(qe, 1);
AddElement(qe, 2);
AddElement(qe, 3);
AddElement(qe, 4);
AddElement(qe, 5);
VisitQueue(qe);
DeleteElement(qe);
VisitQueue(qe);
DeleteElement(qe);
VisitQueue(qe);
DeleteElement(qe);
VisitQueue(qe);
DeleteElement(qe);
VisitQueue(qe);
DeleteElement(qe);
VisitQueue(qe);
DeleteElement(qe);
VisitQueue(qe);
printf("front = %d, rear = %d", qe->front, qe->rear);
return ;
}
本文详细介绍了一种基于顺序存储结构实现队列的方法,包括创建队列、判断队列是否为空或满、添加元素、删除元素及遍历队列等核心操作。通过具体的C语言代码示例,展示了队列的基本原理及其在程序设计中的应用。
1571

被折叠的 条评论
为什么被折叠?



