顺序队列

来源:互联网 发布:阿里云的作用 编辑:程序博客网 时间:2024/06/06 02:31

运用队列编写程序:

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


代码

#include <stdio.h>#include <malloc.h>#define MAXLEN 100#define ElemType chartypedef 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 0
原创粉丝点击