0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 4
1

Определите конечное состояние очереди

22.12.2014, 23:42. Показов 472. Ответов 1
Метки нет (Все метки)

Есть такая программа к заданию: "Имеется очередь количество элементов в которой не может превысить заданную величину. Задана последовательность включений и исключений элементов . Определите конечное состояние очереди".
Нужно ее переделать так, чтобы определялось не конечное состояние очереди, а на каком шаге очередь пуста.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <stdio.h>
#include <stdlib.h>
#define N 5
 
// Включение элемента в очередь
void push(int A[], int *amount, int *tail, int *m)
{
    // Проверка на заполненность очереди
    if (*tail == 0 && *amount >=5)
    {
        printf("\nQueue is Full!\n");
    }
    else
    {
        printf("\nEnter element of queue:");
        scanf_s("%d", &A[*tail]);
        (*amount)++;
        *tail = (*tail + 1) % 5;
    }
}
// Вывод очереди
void output(int A[], int tail, int head, int amount, int i, int j)
{
    printf("\nQueue:");
 
    j = 0;
    for (i = head; i <=amount+3 ; i++, j++)
    {
        if (j<amount)
            printf("%d ", A[i]);
    }
 
}
// Удаление элемента очереди
void pop(int A[], int *amount, int *head)
{
    // Проверка: пуста ли очередь
    if (*amount == 0)
    {
        printf("\n0 elements in queue!\n");
    }
    else
    {
        printf("Delete element %d", A[*head]);
        *head = (*head + 1) % 5;
        (*amount)--;
    }
}
 
int main()
{
    int A[N];
    int S, n = 0, head = 0, tail = 0, i = 0, j = 0, m=0;
    for (;;)
    {
        // Меню 
        printf("\n1.Push element\n2.Pop element\n3.Output qoeue\n4.Exit\n:");
        scanf_s("%d", &S);
        switch (S)
        {
        case 1:push(A, &n, &tail, &m);
            break;
        case 2:pop(A, &n, &head);
            break;
        case 3:output(A, tail, head, n, i, j);
            break;
        case 4:
            return 0;
        }
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2014, 23:42
Ответы с готовыми решениями:

Определить конечное состояние выходов счетчика на T-триггерах
Имеется схема цифрового счетчика реализованного с помощью T-триггеров. Заданы начальные состояния...

Какова суммарная работа газа при переходе из начального в конечное состояние
Десять молей двуокси углерода (СО2), находящейся при температуре T=300К и давлении P1= 2,0*105 Па,...

В эвм вводиться по очереди данные о росте N учащихся.определите средний рост учащихся.
ребят помогите а:sorry: ПОМОГИТЕ SOS В эвм вводиться по очереди данные о росте N...

Можно ли при гибернации сохранить состояние нескольких приложений, но при этом не сохранять состояние системы?
можно сохранить состояние нескольких приложений, но при этом не сохранять состояние системы? убил...

1
16 / 16 / 17
Регистрация: 22.06.2013
Сообщений: 73
Записей в блоге: 3
23.12.2014, 18:41 2
Во-первых, вы можете писать не if(*tail==0), а if(!(*tail)), и далее по коду.
Во-вторых, чтобы определить на "каком шаге", Вы можете сделать так, чтобы функция возвращала целочисленное значение.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int pop(int A[], int *amount, int *head)
{
    int err = 0;
    // Проверка: пуста ли очередь
    if (!(*amount))
    {
        printf("\n0 elements in queue!\n");
        err = 1;
    }
    else
    {
        printf("Delete element %d", A[*head]);
        *head = (*head + 1) % 5;
        (*amount)--;
        err = 0;
    }
   return err;
}
И далее в коде:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
switch (S)
        {
        case 1:push(A, &n, &tail, &m);
            break;
        case 2: 
      { if(pop(A, &n, &head))
         printf("Queue is empty\n");
         break;}
        case 3:output(A, tail, head, n, i, j);
            break;
        case 4:
            return 0;
        }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2014, 18:41
Помогаю со студенческими работами здесь

Выведите содержимое очереди на экран и посчитайте количество элементов образованной очереди
Дан текстовый файл. Проанализировав в программе содержимое файла, выберите из него имена и занесите...

Очереди. С помощью первой очереди упорядочить числа во второй и третьей очередях
Даны три очереди. Одна пуста а в двух других находятся натуральные числа. С помощью первой очереди...

Вывести содержимое очереди на экран и посчитать количество элементов образованной очереди
Дан текстовый файл. Проанализировать в программе содержимое файла, выберете из него имена и...

Очереди. Каким образом считать две очереди из одного текстового файла?
Здравстуйте. В задании первый пункт состоит в том, что нужно сформировать две очереди по n...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru