Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // СТЕК
- using namespace std;
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <Windows.h>
- int const width = 100; // ширина
- int const N = 3;
- int const countOfStolb = 4; //кол-во столбов
- struct Comp { // создаем структуру
- string avtor;
- string nazvanie;
- int year;
- int price;
- Comp* next; // ссылка на пред.элемент
- Comp* head; //ссылка на голову
- };
- void Add(Comp* steck) { // метод добавления в стек
- Comp* tmp = new Comp; // ссылка на структуру и выделение память на нее
- cout << "Введите автора: ";
- cin >> tmp->avtor;
- cout << "Введите название картины: ";
- cin >> tmp->nazvanie;
- cout << "Введите год написания: ";
- cin >> tmp->year;
- cout << "Введите сумму страховки: ";
- cin >> tmp->price;
- tmp->next = steck->head;
- steck->head = tmp;
- }
- Comp ReturnHead(Comp* steck) { // возвращение головного элемента стека
- return *steck->head;
- }
- void Show(Comp* steck) { // показ по правилу LIFO
- Comp* tmp = steck->head;
- while (tmp != NULL) {
- cout << "|" << setw(width / countOfStolb) << tmp->avtor << "|" << setw(width / countOfStolb) << tmp->nazvanie << "|" << setw(width / countOfStolb) << tmp->year << "|"
- << setw(width / countOfStolb) << tmp->price << "|\n";
- for (int j = 0; j < width; j++) {
- cout << "-";
- }
- cout << "\n";
- tmp = tmp->next; // переход на предыдущего
- }
- }
- void PrintHead(Comp* steck) { // вывод головы
- Comp* tmp = steck->head;
- cout << "|" << setw(width / countOfStolb) << tmp->avtor << "|" << setw(width / countOfStolb) << tmp->nazvanie << "|" << setw(width / countOfStolb) << tmp->year << "|"
- << setw(width / countOfStolb) << tmp->price << "|\n";
- for (int j = 0; j < width; j++)
- cout << "-";
- cout << "\n";
- }
- void PrintTable() { // вывод границ таблицы
- cout << "|" << setw(width / 2) << "Картинная галерея" << setw(width / 2) << "|\n";
- for (int i = 0; i < width; i++) {
- cout << "-";
- }
- cout << "\n";
- cout << "|" << setw(width / countOfStolb) << "Автор |" << setw(width / countOfStolb) << "Название картины |" << setw(width / countOfStolb) << "Год написания|" << setw(width / countOfStolb)
- << "Сумма страховки, руб |\n";
- for (int j = 0; j < width; j++) {
- cout << "-";
- }
- }
- void DeleteHead(Comp * steck) { // удаление головы
- Comp* tmp = steck->head->next;
- delete steck->head;
- steck->head = tmp;
- }
- void ClearSteck(Comp * steck) { // чистка стека
- while (steck->head != NULL) {
- Comp* tmp = steck->head->next;
- delete steck->head;
- steck->head = tmp;
- }
- }
- int main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- Comp* steck = new Comp; // выделяется память
- steck->head = NULL; // голова пуста
- // добавление стека
- for (int i = 0; i < N; i++) {
- Add(steck);
- }
- // показ стека
- PrintTable();
- cout << "\n";
- Show(steck);
- // удаление головы и показ новой
- DeleteHead(steck);
- cout << "\nСтек после метода удаления головы:\n";
- PrintTable();
- Show(steck);
- cout << "\nПечать новой головы стека:\n";
- // печать новой головы
- PrintHead(steck);
- // добавление новой головы
- cout << "Метод добавления новой головы и последующий показ стека:\n";
- Add(steck);
- PrintTable();
- Show(steck);
- // удаление стека
- ClearSteck(steck);
- delete steck->head; // удаление указателя на голову
- delete steck; // удаление указателя на стек
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement