队列的顺序表示和实现

1、队列就是一种先进先出的数据结构,一端插入元素,另一端取出元素。

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

static int const QUEUE_INIT_SIZE = 10;
static int const QUEUE_INCREMENT = 10;
typedef char QElemType;
typedef struct MyQueue
{
    QElemType * front;
    QElemType * rear;
    int queueSize;
    int queueLength;
}MyQueueList;

//队头为空,队头出队,队尾进队
int initQueue(MyQueueList * queue){
    queue->front = (QElemType *)malloc(QUEUE_INCREMENT * sizeof(QElemType));
    if (!queue->front)
    {
        printf("队列初始化失败。\n");
        return 0;
    }
    queue->rear = queue->front;
    queue->queueSize = QUEUE_INIT_SIZE;
    queue->queueLength = 0;
    return 1;
}

int enterQueue(MyQueueList * queue, QElemType elem){
    if (queue->rear - queue->front >= queue->queueSize)
    {
        queue->front = (QElemType *)realloc(queue->front, (queue->queueSize + QUEUE_INCREMENT) * sizeof(QElemType));
        if (!queue->front)
        {
            printf("重新分配空间失败。\n");
            return 0;
        }
        queue->rear = queue->front + queue->queueSize;
        queue->queueSize += QUEUE_INCREMENT;
    }
    queue->rear++;
    *(queue->rear) = elem;
    queue->queueLength++;
    return 1;
}

int outQueue(MyQueueList * queue, QElemType * elem){
    if (queue->front == queue->rear)
    {
        printf("这是一个空队列。\n");
        return 0;
    }
    *elem = *(queue->front + 1);
    queue->queueLength--;
    int i = 1;
    while (queue->front + i <= queue->rear)
    {
        *(queue->front + i-1) = *(queue->front + i);
        i++;
    }
    return 1;
}

int printQueue(MyQueueList * q){
    if (q->front == q->rear)
    {
        printf("这是一个空队列。\n");
        return 0;
    }
    for (int i = 0; i < q->queueLength; i++)
    {
        printf("%c", *(q->front+i+1));
    }
    printf("\n");
    return 1;
}

int main(int argc, const char * argv[]){
    
    MyQueueList queue;
    initQueue(&queue);
    
    for (int i = 0; i < 22; i++)
    {
        enterQueue(&queue, 'A' + i);
    }
    printQueue(&queue);
    
    QElemType elem;
    outQueue(&queue, &elem);
    printf("出队列的元素是:%c\n", elem);
    
    printQueue(&queue);
    
    return 0;
}

输出:

ABCDEFGHIJKLMNOPQRSTUV
出队列的元素是:A
BCDEFGHIJKLMNOPQRSTUV
Program ended with exit code: 0


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值