• 队列 —— 循环队列


    循环对列的存储结构定义:

    1 #include<stdio.h>
    2 #include<stdlib.h>
    3 #define M 5
    4 typedef int QueueElementType;
    5 typedef struct{
    6     QueueElementType element[M];/*队列的元素空间,用数组实现*/
    7     int front;/*头指针指示器*/
    8     int rear;/*尾指针指示器*/
    9 }SeqQueue;

    循环对列初始化:

    1 SeqQueue* InitQueue(){
    2     /*malloc动态分配空间*/
    3     SeqQueue* q = (SeqQueue*)malloc(sizeof(SeqQueue));
    4     /*初始化一个空的循环队列*/
    5     q->front = q->rear = 0;
    6     return q;
    7 }

    循环对列入队:

     1 int enterQueue(SeqQueue* q, QueueElementType x) {
     2 /*元素x进入循环队列,需要判断循环队列是否已满*/
     3     if ((q->rear+1)%M==q->front)
     4     {
     5         return false;
     6     }
     7     /*元素x从尾部进入循环队列*/
     8     q->element[q->rear] = x;
     9     /*循环队列的尾指针向后移动1位,(q->rear+1)%M:实现循环作用*/
    10     q->rear = (q->rear + 1) % M;
    11     return true;
    12 }

    循环对列出队:

    1 int deleteQueue(SeqQueue* q, QueueElementType* x) {
    2     /*循环队列出队操作,需要判断循环队列是否为空*/
    3     if (q->front==q->rear) {
    4         return false;
    5     }
    6     *x = q->element[q->front];
    7     q->front = (q->front + 1) % M;
    8     return true;
    9 }

    循环对列长度:

    1 int length(SeqQueue *q) {
    2     return (q->rear - q->front + M) % M;
    3 }

    循环对列的打印:

    1 void printfQueue(SeqQueue* q) {
    2     printf("循环队列的元素:");
    3     for (int i = q->front; i <q->rear; i++)
    4     {
    5         printf("%d ", q->element[i]);
    6     }
    7     printf("\n");
    8 }

    主函数:

     1 int main() {
     2     SeqQueue* q = initQueue();
     3     QueueElementType x;
     4 
     5     enterQueue(q, 10);
     6     enterQueue(q, 20);
     7     enterQueue(q, 30);
     8     enterQueue(q, 40);
     9     printfQueue(q);
    10 
    11     /*循环队列的长度*/
    12     int l = length(q);
    13     printf("循环队列的长度:%d\n", l);
    14 
    15     deleteQueue(q, &x);
    16     printf("循环队列出队的元素:%d\n", x);
    17     deleteQueue(q, &x);
    18     printf("循环队列出队的元素:%d\n", x);
    19     deleteQueue(q, &x);
    20     printf("循环队列出队的元素:%d\n", x);
    21     deleteQueue(q, &x);
    22     printf("循环队列出队的元素:%d\n", x);
    23 
    24     printfQueue(q);
    25     return 0;
    26 }

  • 相关阅读:
    简单实用的Asp.net生成静态页方法
    第八章 、数据存储 Stroe
    第七章 、使用表格控件
    第九章 、 TreePanel
    mysql 安装时的第三第四步出错解决方法
    asp.net 水晶报表 VS2008 10.5版本
    关于log4net的使用
    SQL2000时安装挂起的解决方法
    linux下安装Sublime Text3并将它的快捷方式放进启动器中和卸载Sublime
    Linux下安装配置jdk
  • 原文地址:https://www.cnblogs.com/chaunceyji/p/13990252.html
Copyright © 2020-2023  润新知