Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2024, 12:39   #1
leksi223
Новичок
Джуниор
 
Регистрация: 14.05.2024
Сообщений: 6
По умолчанию Помогите проверить код

Необходимо написать программу тестирования на си дека с ограниченным входом. Программа тестирования должна
включать в себя следующие инструкции:
- добавление элементов в структуру с фиксацией результата (добавление
произошло или нет). Если структура данных – дек, добавление элементов
должно осуществляться с обоих открытых концов;
- извлечение элемента из структуры с фиксацией результата (извлекли или
нет). Если структура данных – дек, извлечение элементов должно
осуществляться с обоих открытых концов;
- проверка пустоты структуры;
- проверка заполненности структуры.
Дек с ограниченным входом или выходом
Обязательные: добавление элемента в открытый конец, удаление элемента
с открытого конца. Дополнительные: неразрушающее чтение элемента с
открытого конца, проверка заполнения дека, проверка пустоты дека.
Мой код:
Код:
#include <stdio.h>
#include <stdbool.h>

// максимальная длина дека
#define MAXLENGTH 10

typedef int DataType;

// Структура дека
typedef struct Deque {
    int left, right;
    DataType data[MAXLENGTH];
} Deque;

// Функция для инициализации дека
void MakeNull(Deque *pDeque);

// Функция для проверки, пустой ли дек
bool Empty(Deque *pDeque);

// Функция для проверки, полон ли дек
bool Full(Deque *pDeque);

// Функция для добавления элемента справа в дек
bool InRight(DataType x, Deque *pDeque);

// Функция для удаления элемента слева из дека
DataType OutLeft(Deque *pDeque);

// Функция для удаления элемента справа из дека
DataType OutRight(Deque *pDeque);

// Главная функция
int main() {
    Deque Deque; // Создание объекта дека
    int i;

    // Инициализация дека
    MakeNull(&Deque);

    // Добавление элементов от 1 до 5 справа в дек
    for (i = 1; i <= 5; i++) {
        InRight(i, &Deque);
    }

    // Удаление элемента слева из дека и вывод его значения
    printf("Элемент удален из левой стороны: %d\n", OutLeft(&Deque));

    // Удаление элемента справа из дека и вывод его значения
    printf("Элемент удален из правой стороны: %d\n", OutRight(&Deque));

    // Удаление элемента справа из дека и вывод его значения
    printf("Элемент удален из правой стороны: %d\n", OutRight(&Deque));

    // Добавление элементов от 1 до 5 снова справа в дек
    for (i = 1; i <= 5; i++) {
        InRight(i, &Deque);
    }

    // Удаление элемента слева из дека и вывод его значения
    printf("Элемент удален из левой стороны: %d\n", OutLeft(&Deque));

    // Удаление элемента слева из дека и вывод его значения
    printf("Элемент удален из левой стороны: %d\n", OutLeft(&Deque));

    // Удаление элемента справа из дека и вывод его значения
    printf("Элемент удален из правой стороны: %d\n", OutRight(&Deque));

    // Добавление элементов от 1 до 6 справа в дек, если дек не полон
    for (i = 1; i <= 6; i++) {
        if (!Full(&Deque)) {
            InRight(i, &Deque);
            printf("Добавлен элемент: %d\n", i);
        } else {
            printf("Дек полон\n");
        }
    }

    // Вывод элементов в деке
    printf("Элементы в деке: ");
    while (!Empty(&Deque)) {
        printf("%d ", OutLeft(&Deque));
    }
    printf("\n");

    return 0;
}

// Функция для инициализации дека
void MakeNull(Deque *pDeque) {
    pDeque->left = 0;
    pDeque->right = MAXLENGTH - 1;
}

// Функция для проверки, пустой ли дек
bool Empty(Deque *pDeque) {
    return (pDeque->right + 1) % MAXLENGTH == pDeque->left;
}

// Функция для проверки, полон ли дек
bool Full(Deque *pDeque) {
    return (pDeque->right + 2) % MAXLENGTH == pDeque->left;
}

// Функция для добавления элемента справа в дек
bool InRight(DataType x, Deque *pDeque) {
    if (Full(pDeque))
        return false;
    pDeque->right = (pDeque->right + 1) % MAXLENGTH;
    pDeque->data[pDeque->right] = x;
    return true;
}

// Функция для удаления элемента слева из дека
DataType OutLeft(Deque *pDeque) {
    int temp = pDeque->left;
    pDeque->left = (pDeque->left + 1) % MAXLENGTH;
    return pDeque->data[temp];
}

// Функция для удаления элемента справа из дека
DataType OutRight(Deque *pDeque) {
    int temp = pDeque->right;
    pDeque->right = pDeque->right ? pDeque->right - 1 : MAXLENGTH - 1;
    return pDeque->data[temp];
}
leksi223 вне форума Ответить с цитированием
Старый 16.05.2024, 22:44   #2
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 962
По умолчанию

Проверка онлайн https://rextester.com/AYY65446

Элемент удален из левой стороны: 1
Элемент удален из правой стороны: 5
Элемент удален из правой стороны: 4
Элемент удален из левой стороны: 2
Элемент удален из левой стороны: 3
Элемент удален из правой стороны: 5
Добавлен элемент: 1
Добавлен элемент: 2
Добавлен элемент: 3
Добавлен элемент: 4
Добавлен элемент: 5
Дек полон
Элементы в деке: 1 2 3 4 1 2 3 4 5
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую
сфинкс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите проверить мою Олимпиаду Vladik_2954 Помощь студентам 4 18.10.2018 00:08
Помогите проверить программы. etharda Паскаль, Turbo Pascal, PascalABC.NET 1 22.03.2015 14:40
Помогите проверить задачю. Dmitriy-e-nest Помощь студентам 1 17.01.2009 15:23