• 队列的循环队列


    先附上C++下的代码

     1 #include <iostream>
     2 #include<malloc.h>
     3 #define MAXSIZE 100
     4 
     5 using namespace std;
     6 
     7 typedef struct{
     8 int *base;
     9 int front;
    10 int rear;
    11 }SqQueue;
    12 int InitQueue(SqQueue &Q,int n){//初始化队列
    13     int i;
    14     Q.base = (int *)malloc(MAXSIZE * sizeof(int));
    15     if(!Q.base) exit(-1);
    16     Q.front=0;
    17     Q.rear=0;
    18     if(n==0)return -1;
    19     for(i=0;i<n;i++){
    20         cin>>Q.base[i];
    21         Q.rear++;
    22     }
    23     return 0;
    24 }
    25 
    26 int EnQueue(SqQueue &Q, int e){//入队
    27     if((Q.rear+1)%MAXSIZE==Q.front) exit(-1);
    28     Q.base[Q.rear]=e;
    29     Q.rear=(Q.rear+1)%MAXSIZE;
    30     return 0;
    31 }
    32 
    33 int OutQueue(SqQueue &Q,int &e){//出队
    34     if(Q.front==Q.rear) exit(-1);
    35     e=Q.base[Q.front];
    36     Q.front=(Q.front+1)%MAXSIZE;
    37     return 0;
    38 }
    39 
    40 int OutputQueue(SqQueue Q){//输出队列中的元素
    41     if(Q.front==Q.rear) exit(-1);
    42     int p;
    43     p=Q.front;
    44     while(p!=Q.rear){
    45         cout<<Q.base[p]<<endl;
    46         p=(p+1)%MAXSIZE;
    47     }
    48     return 0;
    49 }
    Here!Look,Look

      循环队列中最难也是最妙的操作就是,将实际线性的顺序存储空间以代码实现令人产生幻觉(其实就是人类自己想像)的循环队列的效果......

      

      通过一个求余队列长度(%MAXSIZE),达到了每次超过队列长度就循环至队头开始赋值,直至队列已满,同时舍弃一个空间来判断队列是否为满。

    本文rear是指向尾号元素的下一位,当(Q.rear+1)%MAXSIZE=Q.front时,队满。
  • 相关阅读:
    C# 以GZip解压缩
    C# 获取时间戳(支持毫秒)
    C#中 DateTime 转 DateTimeOffset
    C# WPF中 SecureString 转 String
    C# 根据文件头判断文件类型
    C#中 MD5 32位加密
    C#中 Stream转为byte[]
    C#中byte[]转BitmapImage
    sql按天分组
    eclispe报错PermGen space
  • 原文地址:https://www.cnblogs.com/wssblogs/p/7692356.html
Copyright © 2020-2023  润新知