Пятница, 20.06.2025, 12:54

Приветствую Вас Гость | RSS
Мой сайт
ГлавнаяРегистрацияВход
Меню сайта

Статистика

Онлайн всего: 3
Гостей: 3
Пользователей: 0

Главная » 2015 » Август » 26 » В C++. Создать динамическую структуру данных : Стек на основе списка C++
00:33
В C++. Создать динамическую структуру данных : Стек на основе списка C++

Сегодня мы с Вами поговорим о списках в С++. А именно о списке типа Стек (от англ. Stack).

Стек - это структура данных, представляющая собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»). Часто приводят аналогию с магазином в огнестрельном оружии (стрельба начнётся с патрона, заряженного последним).

Стек выглядит примерно так:

Теперь, смотрим:

Итак, сделаем пример с видео. Запишем очень большое число в стек (например 9^100).

Начнем с того, что нам нужно создать нашу структуру:

struct number { int x; // Здесь будет 1 цифра number *adr; // Здесь адрес следующего элем. }

Создаем два указателя типа number.

number *top = NULL, *p;

Теперь припустим что мы это число считываем с файла по цифре. (file - указатель на файл.)

do { p = new number; // Создаем новый элемент списка p->adr = top; // Привязываем к предидущему элементу file>>p->x; // Считываем цифру с файла top = p; // Смещаем вершину стека } while(top->x); // Повторяем цикл пока есть еще что-то в файле

Мы научились вводить данные в наш стек. Как Вы можете видеть здесь нет никаких ограничений по размеру, как например есть в массиве.

Теперь попробуем вставить элемент посередине нашего стека.
Допустим наш список выглядит так: 1, 2, 3, 4, 5, 6, 7, 8, 9. Теперь между цифрой 7 и 8 мы вставим цифру 15.

p = top; // Чтобы не потерять вершину стека, будем использовать дополнительный указатель while(p->x != 7 || p->adr != NULL) { // Пока мы не дошли до цыфры 7, или если ее нет, то до конца списка p = p->adr; // Смещаемся вниз } number *new_el = new number; // Создаем новый элемент списка new_el->x = 15; // Сохраняем в него число 15 new_el->adr = p->adr; // Привязываем новый элемент с элементов с цифрой 8 p->adr = new_el; // Привязываем элемент с цифрой 7 к новому элементу

Мы научились создавать динамическую стуктуру данных типа стек, и заполнять ее. А также добавлять новый элемент по средине списка.

Теперь попробуем удалить элемент. Допустим список у нас как в предыдущем примере. И нам нужно удалить наше вставленное число 15.

while(p->x != 7 || p->adr != NULL) { // Пока мы не дошли до цыфры 7, или если ее нет, то до конца списка p = p->adr; // Смещаемся вниз } number *p2 = p->adr; // Сохраняем адрес элемента в новый указатель p->adr = p->adr->adr; // Привязываем адрес к следующему элементу после удаляемого delete p2; // Удаляем элемент

Теперь мы с Вами умеем создавать списки типа стек, и заполнять их элементами. А также добавлять в них элементы и удалять их них.

Если Вам это было полезно, тогда жмите "мне нравиться".

P.S. Маленькое ДЗ, для проверки Ваших знаний. Напишите мне в комментариях код вывода всех элементов из списка.

Просмотров: 681 | Добавил: supoinclus | Рейтинг: 0.0/0
Всего комментариев: 0
Вход на сайт

Поиск

Календарь
«  Август 2015  »
Пн Вт Ср Чт Пт Сб Вс
     12
3456789
10111213141516
17181920212223
24252627282930
31

Архив записей

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2025Бесплатный хостинг uCoz