C语言数据结构-数组实现队列详解

        队列是一种重要的先进先出数据结构,在操作系统、算法、网络通信等领域广泛应用。本文将详细介绍如何使用C语言的数组实现队列,包括完整的代码实现、详细的图文解释和实用的测试用例!

        队列是一种线性数据结构,遵循先进先出原则:

  • 入队(Enqueue):元素从队尾加入;
  • 出队(Dequeue):元素从队首移除。

一、数据结构定义

#include <stdio.h>
#include <stdlib.h>

#define MaxSize 5

int queue[MaxSize];
int front = -1;  // 队首指针,指向队首元素的前一个位置
int rear = -1;   // 队尾指针,指向队尾元素的位置

1. 初始空队列

2. 指针移动规则

        front:总是指向"队首元素的前一个位置";

        rear:总是指向"队尾元素的位置"。

二、关键操作详细

1. 入队操作(add_queue

void add_queue(int value) {
    if (rear >= MaxSize - 1) {
        printf("队列已满,不能入队\n");
    } else {
        rear = rear + 1;          // 队尾指针后移
        queue[rear] = value;      // 存入新元素
        printf("入队成功:%d\n", value);
    }
}

2. 出队操作(del_queue

int del_queue() {
    int tempvalue;
    
    if (front == rear) {
        printf("队列为空,不能出队\n");
        tempvalue = -1;
    } else {
        front = front + 1;          // 队首指针后移
        tempvalue = queue[front];   // 取出队首元素
        queue[front] = 0;           // 可选:清空位置
        printf("出队成功:%d\n", tempvalue);
    }
    
    return tempvalue;
}

3. 获取队首元素(get_front)

        返回:队首元素值,如果队列为空返回-1。

int get_front() {
    if (front == rear) {
        printf("队列为空\n");
        return -1;
    }
    return queue[front + 1];
}

4. 获取队尾元素(get_rear)

        返回:队尾元素值,如果队列为空返回-1。

int get_rear() {
    if (front == rear) {
        printf("队列为空\n");
        return -1;
    }
    return queue[rear];
}

5. 打印元素(print_queue)

void print_queue() {
    if (front == rear) {
        printf("队列为空\n");
        return;
    }
    
    printf("队列元素:");
    for (int i = front + 1; i <= rear; i++) {
        printf("%d ", queue[i]);
    }
    printf("\n");
}

6. 打印队列完整状态,包括指针位置(print_queue_full)

void print_queue_full() {
    printf("队列数组:");
    for (int i = 0; i < MaxSize; i++) {
        printf("%d ", queue[i]);
    }
    printf("\n");
    printf("front指针:%d, rear指针:%d\n", front, rear);
}

7.主函数main

int main() {
    int a, b, c;
    a = 10;
    b = 20;
    c = 30;
    
    printf("=== 数组实现队列测试 ===\n");
    
    // 测试1:基本入队
    printf("1. 测试基本入队操作:\n");
    add_queue(a);
    add_queue(b);
    add_queue(c);
    print_queue();
    print_queue_full();
    
    // 测试2:获取元素
    printf("\n2. 测试获取元素:\n");
    printf("队首元素:%d\n", get_front());
    printf("队尾元素:%d\n", get_rear());
    
    // 测试3:出队操作
    printf("\n3. 测试出队操作:\n");
    del_queue();
    print_queue();
    print_queue_full();
    
    // 测试4:继续入队测试队列满
    printf("\n4. 测试队列满:\n");
    add_queue(40);  // 成功入队
    add_queue(50);  // 成功入队
    add_queue(60);  // 应该提示队列已满
    print_queue();
    print_queue_full();
    
    // 测试5:清空队列
    printf("\n5. 清空队列:\n");
    while (front != rear) {
        del_queue();
    }
    print_queue();
    print_queue_full();
    
    // 测试6:空队列操作
    printf("\n6. 空队列测试:\n");
    del_queue();  // 应该提示队列为空
    printf("队首元素:%d\n", get_front());
    
    return 0;
}

三、运行结果

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值