Загрузка...

What is this deck of yours

Thread in C/C++ created by impelix Oct 3, 2022. 133 views

  1. impelix
    impelix Topic starter Oct 3, 2022 5 Nov 28, 2021
    Опять же обращаюсь к вам
    Задача написать свой дэк не используя deque
    Условия и ссылка на задачу есть ниже
    push_front

    Добавить (положить) в начало дека новый элемент. Программа должна вывести ok.

    push_back

    Добавить (положить) в конец дека новый элемент. Программа должна вывести ok.

    pop_front

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

    pop_back

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

    front

    Узнать значение первого элемента (не удаляя его). Программа должна вывести его значение.

    back

    Узнать значение последнего элемента (не удаляя его). Программа должна вывести его значение.

    size

    Вывести количество элементов в деке.

    clear

    Очистить дек (удалить из него все элементы) и вывести ok.

    exit

    Программа должна вывести bye и завершить работу.

    Гарантируется, что количество элементов в деке в любой момент не превосходит 100. Перед исполнением операций pop_front, pop_back, front, back программа должна проверять, содержится ли в деке хотя бы один элемент. Если во входных данных встречается операция pop_front, pop_back, front, back, и при этом дек пуст, то программа должна вместо числового значения вывести строку error
    Мои попытки решения
    [IMG]
    На питоне я просто тестил и там слишком много памяти занимает, а на с++ она с использованием дека, я проверял тестовые данные.
    Код наиболее удачно задачи

    C
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <vector>
    using namespace std;

    int storage[100000];
    int start = 0;
    int finish = 0;

    void push_back(int n){
    storage[finish] = n;
    finish++;
    cout << "ok" << endl;
    }
    void push_front(int n){
    storage[start] = n;
    start--;
    cout << "ok" << endl;
    }

    void pop_front(){
    if (finish - start == 0){
    cout << "error" << endl;
    return;
    }
    cout << storage[start] << endl;
    start--;
    }
    void pop_back(){
    if (finish - start == 0){
    cout << "error" << endl;
    return;
    }
    cout << storage[finish] << endl;
    finish--;
    }

    void front(){
    if (finish - start == 0){
    cout << "error"<< endl;
    return;
    }
    cout << storage[start] << endl;;
    }
    void back(){
    if (finish - start == 0){
    cout << "error"<< endl;
    return;
    }
    cout << storage[finish- 1] << endl;
    }

    void clear(){
    finish = 0;
    start = 0;
    cout << "ok" << endl;
    }



    int main(){
    string word;
    int n;
    while(true){
    cin >> word;
    if (word == "push_back")
    {
    cin >> n;
    push_back(n);
    }
    else if(word == "front")
    {
    front();
    }
    else if (word =="push_front")
    {
    cin >> n;
    push_front(n);
    }
    else if (word == "size")
    {
    cout << finish - start << endl;
    }
    else if (word == "clear")
    {
    clear();
    }
    else if (word == "pop_back")
    {
    pop_back();
    }else if (word == "pop_front")
    {
    pop_front();
    }
    else if (word == "back")
    {
    back();
    }
    else if (word == "exit")
    {
    cout << "bye" << endl;
    return 0;
    }
    }
    return 0;
    }
     
Top
Loading...