Advertisement
zodiak1

Очередь и операции с ней. Статическая функциональная реализация. Освободившиеся места не исп.

Mar 13th, 2022
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.22 KB | None | 0 0
  1. #include <conio.h>
  2. #include <stdio.h>
  3. #include <locale.h>
  4. #include <windows.h>
  5.  
  6. const UCHAR N = 3, Q_EMPTY = 2, Q_FULL = 1;
  7.  
  8. struct queue
  9. {
  10.    UCHAR begin = 0, end = 0;
  11.    LONGLONG data[N] = { 0 };
  12. };
  13.  
  14. UCHAR push(queue &q, LONGLONG elem);
  15. UCHAR pop(queue &q, LONGLONG &elem);
  16.  
  17. bool is_empty(queue q);
  18. bool is_full(queue q);
  19.  
  20. void clear(queue &q);
  21. void print(queue q);
  22.  
  23. int main()
  24. {
  25.    queue Q;
  26.  
  27.    return 0 * _getch();
  28. }
  29.  
  30. UCHAR push(queue &q, LONGLONG elem)
  31. {
  32.    bool is_f = is_pfull(q);
  33.    
  34.    if (!is_f)
  35.    {
  36.       q.end++;
  37.       q.data[q.end] = elem;
  38.    }
  39.  
  40.    return is_f ? Q_FULL : 0;
  41. }
  42. UCHAR pop(queue &q, LONGLONG &elem)
  43. {
  44.    bool is_e = is_empty(q);
  45.  
  46.    if (!is_e)
  47.    {
  48.       elem = q.data[q.begin];
  49.       q.data[q.begin] = 0;
  50.  
  51.       q.begin++;
  52.    }
  53.  
  54.    return is_e ? Q_EMPTY : 0;
  55. }
  56.  
  57. bool is_empty(queue q)
  58. {
  59.    return q.end == q.begin;
  60. }
  61. bool is_full(queue q)
  62. {
  63.    return q.end == N -1 && q.begin == 0;
  64. }
  65. bool is_pfull(queue q)
  66. {
  67.    return q.end == N - 1 && q.begin;
  68. }
  69.  
  70. void clear(queue &q)
  71. {
  72.    for (LONGLONG n = 0; !is_empty(q); pop(q, n));
  73. }
  74. void print(queue q)
  75. {
  76.    LONGLONG n = 0;
  77.    while (!is_empty(q))
  78.    {
  79.       pop(q, n);
  80.       printf_s("%lld", n);
  81.    }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement