顺序队列

运用队列编写程序:

假设Q[1…10]是一个顺序队列,初始状态为front=rear=0,A…Z入队,并求出元素个数。


代码
#include <stdio.h>
#include <malloc.h>
#define MAXLEN 100
#define ElemType char

typedef struct
{
    ElemType data[MAXLEN];
    int front;
    int rear;
    int flag;   //每进行一次出队运算时,标示量flag设为0
}SeqQueue;

//循环队列置空
SeqQueue * initQueue(SeqQueue * q)
{
    q->front = 0;
    q->rear = 0;
    return q;
}

//建一个空循环队列
SeqQueue * setQueue()
{
    SeqQueue * Q = (SeqQueue *)malloc(sizeof(SeqQueue));
    Q->front = 0;
    Q->rear = 0;
    Q->flag = 0;
    return Q;
}

//判队满
int QueueFull(SeqQueue * q)
{
    if ((q->front == (q->rear)%MAXLEN) && q->flag ==1)
        return 1;
    else
        return 0;
}

//判队空
int QueueEmpty(SeqQueue *q)
{
    if ((q->front == (q->rear)%MAXLEN) && q->flag == 0)
        return 1;
    else
        return 0;
}

//入队
void push(SeqQueue * q, ElemType ch)
{
    if (QueueFull(q))
        printf("queue full");
    else
    {
        q->flag = 1;
        q->data[q->rear % MAXLEN] = ch;
        q->rear = (q->rear + 1) % MAXLEN;
    }
}

//出队
void pop(SeqQueue * q)
{
    if (QueueEmpty(q))
        printf("queue empty");
    else
    {
        q->front = (q->front + 1) % MAXLEN;
        q->flag = 0;
    }
}

int getQueueNum(SeqQueue * q)
{
    int num = q->rear - q->front;
    return num;
}

//输出队中有效元素
void showQueue(SeqQueue * q)
{
    int i;
    for (i = q->front; i < q->rear; ++i)
        printf("%c ", q->data[i]);
    printf("\n");
}

int main(void)
{
    SeqQueue * Q = setQueue();

    int i = 0;
    ElemType ch = 'A';
    for (i = 0; i < 26; ++i)    //队里放26个字母
    {
        push(Q, ch++);
    }

  //pop(Q);
  //printf("%s\n", Q->data);
    showQueue(Q);
    printf("%d\n", getQueueNum(Q));

    return 0;
}


测试

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值