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

Реализация стека в структуре данных на основе статического массива

09.01.2023, 20:38. Показов 342. Ответов 1

Author24 — интернет-сервис помощи студентам
Необходимо решить задание через стек на основе статического массива. Я написал код, но у меня получился какой-то бесконечный цикл и в консоль постоянно выводится: Соединение опасное: url=yaraketa.io, размер 174Кб. Буду очень благодарен за помощь!

Задание:
Структура данных Веб-страница имеет следующие поля: url-адрес, размер страницы в Кб, защищенное ли с ним соединение. Выполнить следующие задачи:
1. Создать стек истории посещенных страниц, размер истории 5.
2. Посетить 4 разные страницы и записать их в историю.
3. Взять последнюю посещенную страницу, включить защищенное соединение на ней и снова записать ее в стек.
4. Записать еще 3 страницы в историю.
5. Удалить последнюю страницу из истории.
6. Удалить еще 5 страниц из истории.

Код:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <string>
#include <clocale>
#include <windows.h>
#define SIZE 5
using namespace std;
 
struct Webpage {
    string url;
    unsigned size;
    bool secureConnection;
};
 
struct Stack {
    Webpage arr[SIZE];
    int amountOfElements = 0;
 
    int size() {
        return amountOfElements;
    }
 
    void clear() {
        while (amountOfElements) {
            arr[--amountOfElements] = Webpage();
        }
        cout << "ВНИМАНИЕ! История посещенных веб-страниц очищена!" << endl;
    }
 
    bool empty() {
        return amountOfElements == 0;
    }
 
    void push(Webpage page) {
        if (amountOfElements < SIZE) {
            arr[amountOfElements++] = page;
        }
        else {
            cout << "ВНИМАНИЕ! История посещенных страниц заполнена, нельзя записать новую страницу!" << endl;
        }
    }
 
    void pop() {
        if (amountOfElements > 0) {
            arr[--amountOfElements] = Webpage();
        }
        else {
            cout << "ВНИМАНИЕ! История посещенных страниц пуста, нельзя удалить веб-страницу!" << endl;
        }
    }
 
    Webpage top() {
        if (amountOfElements) {
            return arr[amountOfElements - 1];
        }
        else {
            cout << "ВНИМАНИЕ! История посещенных страниц пуста, нельзя вывести веб-страницу!" << endl;
            return {arr[0]};
        }
    }
};
 
void print(Stack myStack) {
    Webpage page = myStack.top();
    while (!myStack.empty()) {
        cout << "Соединение"
            << (!page.secureConnection ? " НЕ" : " ")
            << "безопасное: url = "
            << page.url << " , размер " << page.size << "Кб" << endl;
    }
    myStack.pop();
}
 
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Stack myStack;
    cout << "История посещенных страниц" << endl;
    myStack.push({ "google.com", 139, true });
    myStack.push({ "youtube.com", 483, true });
    myStack.push({ "yabumaga.pl", 9, false });
    myStack.push({ "yaraketa.io", 174, false });
    print(myStack);
    myStack.clear();
    cout << endl;
 
    cout << "Соединение с yaraketa.io защищено!" << endl;
    myStack.push({ "lol.com", 93, false });
    myStack.push({ "linkedin.com", 452, true });
    myStack.push({ "indianelephant.in", 872, false });
    print(myStack);
    cout << endl;
 
    myStack.pop();
    print(myStack);
    cout << endl;
 
    for (int i = 0; i < 5; ++i) {
        myStack.pop();
    }
    print(myStack);
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2023, 20:38
Ответы с готовыми решениями:

Реализация стека на основе массива
Само задание: Реализовать стек на основе массива 1. проверку пустоты стека 2. проверка...

Инициализация статического массива в структуре
Здравствуйте, Подскажите пожалуйста, вот есть статический массив int`ов: int my_int1 =...

Реализация стека на основе односвязного списка
typedef int Data; typedef struct Stack * pStack; pStack CreateStack(Data val); int ...

Реализация стека и очереди на основе списка
1. Создать базовый класс CList (линейный однонаправленный cписок) с полями: указате-ли на...

Динамическая реализация стека на основе списка
Реализация стека с помощью динамических структур (списка) . Добавить элемент в стек ,удаление...

1
390 / 365 / 111
Регистрация: 03.02.2013
Сообщений: 1,120
09.01.2023, 21:03 2
Лучший ответ Сообщение было отмечено K1T_ как решение

Решение

ну судя из логики условия while (!myStack.empty()) на 69 строчке надо операторную скобку после метода pop
C++
1
2
                myStack.pop();
    }
хотя судя по названию метода он должен быть константным и не вызывать никаких pop, соответственно условие цикла не правильное

Добавлено через 17 минут
C++
1
2
3
4
5
6
7
8
9
10
void print(const Stack myStack) {
    
    for (size_t it=0; it!=myStack.amountOfElements; ++it) {
        Webpage page = myStack.arr[it];
        cout << "Соединение"
            << (!page.secureConnection ? " НЕ" : " ")
            << "безопасное: url = "
            << page.url << " , размер " << page.size << "Кб" << endl;
    }
};
как-то так надо действовать
1
09.01.2023, 21:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2023, 21:03
Помогаю со студенческими работами здесь

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

Очередь на основе статического массива
в очередь с экрана вводятся строки,когда вводится строка end,элементы извлекаются из очереди и...

Стек на основе статического массива
1. Создать стек строк на основе статического массива. Реализовать методы : Добавить элемент,...

Стек на основе статического массива
Создать стек строк на основе статического массива. Реализовать методы : Добавить элемент, удалить...

Стек на основе статического массива
Здравствуйте! Помогите пожалуйста выполнить задание. Сама уже весь форум облазила и нужного не...


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

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

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