zoukankan      html  css  js  c++  java
  • 顺序循环队列

     1 //循环队列的顺序存储表示与实现 
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 /******************************************************************************
     7 /* 数据类型和常量定义
     8 /******************************************************************************/
     9 #define OK           1
    10 #define ERROR        0
    11 #define OVERFLOW    -2
    12 
    13 typedef int Status;
    14 typedef int ElemType;
    15 typedef int QElemType;
    16 
    17 /******************************************************************************
    18 /* 数据结构声明
    19 /******************************************************************************/
    20 /* 循环队列 - 队列的顺序存储结构 */
    21 #define MAXQSIZE 3   /* 最大队列长度 */
    22 
    23 typedef struct {
    24     QElemType *base; /* 初始化的动态分配存储空间 */
    25     int front;       /* 头指针,若队列不空,指向队列头元素 */
    26     int rear;        /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */
    27 }SqQueue;
    28 
    29 
    30 //构造一个空队列Q
    31 Status InitQueue(SqQueue &Q) {
    32     Q.base = (ElemType *)malloc(MAXQSIZE * sizeof(ElemType));
    33     if (!Q.base) exit(OVERFLOW);
    34     Q.front = Q.rear = 0;
    35     return OK;
    36 }
    37 
    38 
    39 //返回Q的元素个数, 即队列的长度
    40 int QueueLength(SqQueue &Q) {
    41     return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
    42 }
    43 
    44 
    45 //插入元素e为Q的新的队尾元素
    46 Status EnQueue(SqQueue &Q, QElemType e) {
    47     if ((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR; //队列满
    48     Q.base[Q.rear] = e;
    49     Q.rear = (Q.rear + 1) % MAXQSIZE;
    50     return OK;
    51 }
    52 
    53 
    54 //若队列不空, 则删除Q的队头元素, 用e返回其值, 并返回OK; 否则返回ERROR
    55 Status DeQueue(SqQueue &Q, QElemType &e) {
    56     if (Q.front == Q.rear) return ERROR;
    57     e = Q.base[Q.front];
    58     Q.front = (Q.front + 1) % MAXQSIZE;
    59     return OK;
    60 }
    61 
    62 //测试函数
    63 void main()
    64 {
    65     SqQueue Q;  QElemType e;
    66     InitQueue(Q);
    67     if(OK == EnQueue(Q, 10)) printf("enqueue ok!
    ");
    68     if(OK == EnQueue(Q, 20)) printf("enqueue ok!
    ");
    69     if(OK == EnQueue(Q, 30)) printf("enqueue ok!
    ");
    70     if(OK == DeQueue(Q, e)) printf("%d
    ", e);
    71     if(OK == DeQueue(Q, e)) printf("%d
    ", e);
    72     if(OK == DeQueue(Q, e)) printf("%d
    ", e);
    73     if(OK == DeQueue(Q, e)) printf("%d
    ", e);
    74 }
  • 相关阅读:
    创建网络数据集
    [虚拟机]Virtual Box的使用--共享文件夹
    MapControl图层删除或添加触发监听事件
    Dev控件GridView单元格绑定控件
    Log4net中换行符
    没有为 COM 互操作注册程序集 请使用 regasm.exe /tlb 注册该程序集——解决办法
    加载dll过程中assembly失败
    Spring Boot 自带缓存及结合 Redis 使用
    Spring Boot + Redis 初体验
    在 Windows 中使用 C# 启动其他程序
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3292411.html
Copyright © 2011-2022 走看看