数据结构

数据结构 第6节 队列

2019-07-20  本文已影响0人  小超_8b2f
一、什么叫做队列❓

一种可以实现【先进先出】的存储结构

二、队列的分类
  1. 链式队列

    链式队列示意图:链表形式实现,front即链表的pHead,rear:臀,屁股
    提示
    一头进一头出,先进先出。实现参考链表。
    front指向第一个有效元素
    rear指向最后一个有效元素的下一个元素,rear本身是无数据元素,类似于链表的pHead
  2. 静态(数组)队列

  1. 如何判定循环队列是否为空
    如果front 和rear的值相等,则该队列肯定为空
  2. 如何判断循环队列已满


    队列满时front 和 rear在同一位置,对列为空时也在同一位置
判断方式

解决方式
方式一  (不采用❌)

方式二  (采用✅)

if( (rear + 1) % 数组长度 == front)
{
  已满
} 
else 
{
  不满
}

队列代码实现

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

typedef struct ArrayQueue {
    int * pBase;  //数据域
    int front;    //指针域
    int rear;     //臀
} QUEUE, * PQUEUE;


void init(PQUEUE);
bool en_queue(PQUEUE, int);
bool out_queue(PQUEUE pQ,int * pVal);
void show(PQUEUE);
bool isEmpty(PQUEUE pQ);
bool isFull(PQUEUE);
void show(PQUEUE pQ);

int main(void) {
    QUEUE q;
    init(&q);
    en_queue(&q,1);
    en_queue(&q,2);
    en_queue(&q,3);
    en_queue(&q,4);
    en_queue(&q,5);
    en_queue(&q,6);
    en_queue(&q,7);
    en_queue(&q,8);
    show(&q);
    int i;
    printf("开始出队:\n");
    out_queue(&q,&i);
    show(&q);
    printf("开始出队:\n");
    out_queue(&q,&i);
    show(&q);
    return 0;
}


void init(PQUEUE pQ) {
    pQ->pBase = (int *)malloc(sizeof(int) * 6);
    pQ->front = 0;
    pQ->rear = 0;
}


bool en_queue(PQUEUE pQ, int val) {
    if(isFull(pQ))
    {
        printf("插入值:%d时 队列已满\n", val);
        return false;
        exit(-1);
    }
    else
    {
        pQ->pBase[pQ->rear] = val;
        pQ->rear++;
        return true;
    }
}

bool out_queue(PQUEUE pQ,int * pVal) {
    if(isEmpty(pQ))
    {
        return false;
    }
    else
    {
        *pVal = pQ->pBase[pQ->front];
        pQ->front = (pQ->front + 1) % 6;
        return true;
    }
}

bool isEmpty(PQUEUE pQ) {
    if(pQ->front == pQ->rear)
       return true;
    else
       return false;
}


bool isFull(PQUEUE pQ) {
    if((pQ->rear + 1) % 6 == pQ->front)
        return true;
    else
        return false;
}

void show(PQUEUE pQ) {
    int i = pQ->front;
    while(i != pQ -> rear) {
        printf("%d ", pQ -> pBase[i]);
        i = (i+1) % 6;
    }
    printf("\n");
    return;
}
上一篇 下一篇

猜你喜欢

热点阅读