C语言数据结构(二):队列

本文详细介绍了一种基于顺序存储结构实现队列的方法,包括创建队列、判断队列是否为空或满、添加元素、删除元素及遍历队列等核心操作。通过具体的C语言代码示例,展示了队列的基本原理及其在程序设计中的应用。

一、顺序存储结构实现

与栈类似,队列也是最简单的数据结构。用顺序存储和链式存储都能实现,但是需要注意的是由于队列是先进先出的,所以队首位置不能超过队尾指针,且当索引超过最大队列长度时,需要使用循环队列

(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 ;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值