Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 52

Удалить из стека элемент, расположенный в середине

08.12.2013, 18:43. Показов 3742. Ответов 1

Студворк — интернет-сервис помощи студентам
Составить программу, которая вводит символы, организует из них линейный односвязный список по типу стека, а затем удаляет средний (количество элементов нечетно) элемент списка и выводит на экран результат. При завершении программа должна освобождать использованную динамическую память.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2013, 18:43
Ответы с готовыми решениями:

Удалить элемент, находящийся в середине стека, если число элементов нечётное, или 2 средних элемента, если чётное
Удалить элемент, находящийся в середине стека , если число элементов нечетное, или 2 средних элемента, если число элементов четное.

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

Нужно удалить минимальный элемент из стека
Помогите пожалуйсто с программой. Нужно удалить минимальный элемент из стека. Я написала программу, но определённо в ней что-то не то. ...

1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
08.12.2013, 23:06
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
program Project1;
 
type
  {Основные данные элемента стека.}
  TData = Char;
  {Указатель на элемент стека.}
  TPElem = ^TElem;
  {Элемент стека.}
  TElem = record
    Data : TData; {Основные данные.}
    PNext : TPElem; {Указатель на следующий элемент стека.}
  end;
  {Для стека отдельный тип можно не создавать. Стек будет представлен в виде
  указателя на тот элемент, который расположенный на вершине стека. Поэтому,
  переменная, представляющая стек, будет иметь тип TPElem.}
 
{Добавление элемента на вершину стека.}
procedure Push(var aPSt : TPElem; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  PElem^.Data := aData;
  PElem^.PNext := aPSt;
  aPSt := PElem;
end;
 
{Изъятие элемента с вершины стека.
Если стек не пуст, то с вершины стека изымается элемент и его значение
(основные данные) возвращается через параметр aData. В этом случае, функция
возвращает значение True. Если стек пуст, то операция отменяется, и функция
возвращает значение False.}
function Pop(var aPSt : TPElem; var aData : TData) : Boolean;
var
  PElem : TPElem;
begin
  Pop := False;
  if aPSt = nil then
    Exit;
 
  PElem := aPSt;
  aPSt := PElem^.PNext;
  aData := PElem^.Data;
  Dispose(PElem);
  Pop := True;
end;
 
{Распечатка стека в направлении вершина - дно.}
procedure StWriteln(const aPSt : TPElem);
var
  PElem : TPElem;
begin
  PElem := aPSt;
  if PElem = nil then
    Write('Стек пуст.')
  else
    while PElem <> nil do
    begin
      if PElem <> aPSt then {Если это не первый элемент, то печатаем разделитель.}
        Write(', ');
      if PElem^.Data <= #32 then {Распечатываем код неотображаемого символа.}
        Write('#', Ord(PElem^.Data))
      else {Распечатка символа, который имеет графическое представление.}
        Write(PElem^.Data);
      PElem := PElem^.PNext; {Указатель на следующий элемент стека.}
    end;
  Writeln;
end;
 
{Освобождение памяти, занятой стеком (очистка стека).}
procedure StFree(var aPSt : TPElem);
var
  Data : TData;
begin
  while Pop(aPSt, Data) do;
end;
 
var
  PSt1, PSt2 : TPElem;
  Data : TData;
  i, Cnt : Integer;
  S : String;
begin
  {Начальная инициализация стеков.}
  PSt1 := nil;
  PSt2 := nil;
 
  repeat
    {Диалог ввода символов.}
    Writeln('Задайте символы.');
    Writeln('Чтобы прекратить ввод, оставьте пустую строку и нажмите Enter.');
    Cnt := 0;
    repeat
      Write('Элемент ', Cnt + 1, ': ');
      Readln(S);
      if S <> '' then
      begin
        Push(PSt1, S[1]);
        Inc(Cnt);
      end;
    until S = '';
    Writeln('Составлен стек (вершина - дно):');
    StWriteln(PSt1);
    Writeln('Количество элементов в стеке: ', Cnt);
 
    {Решение задачи.
    Будем переливать элементы из первого стека - во второй стек. При этом, когда
    встретится элемент, расположенный в середине - его мы во второй стек
    не станем добавлять. Таким образом он окажется удалённым. После переливания
    во втором стеке элементы окажутся в обратном порядке. Затем мы перельём
    элементы обратно: из второго стека - в первый стек. И порядок следования
    элементов вновь станет первоначальным.}
 
    {Удалять элемент в середине имеет смысл только, если количество элементов нечётное.}
    if Cnt mod 2 = 0 then
      Writeln('В стеке чётное количество элементов. Удаление отменено.')
    else
    begin
      {Переливаем элементы из первого стека - во второй стек. И выполняем
      удаление элемента в середине.}
      i := 0; {Счётчик элементов.}
      while Pop(PSt1, Data) do
      begin
        Inc(i);
        if i <> (Cnt div 2 + 1) then
          Push(PSt2, Data);
      end;
      {Переливаем элементы обратно: из второго стека - в первый стек.}
      while Pop(PSt2, Data) do
        Push(PSt1, Data);
      {Ответ.}
      Writeln('Стек после обработки (вершина - дно):');
      StWriteln(PSt1);
      Writeln('Был удалён элемент под номером: ', Cnt div 2 + 1);
    end;
 
    {Освобождаем память, занятую для элементов стеков.}
    StFree(PSt1);
    StFree(PSt2);
    Writeln('Память, выделенная для стеков, освобождена.');
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.12.2013, 23:06
Помогаю со студенческими работами здесь

Удалить элемент стека, равный 10, или вывести, что такого элемента нет
Помогите доделать программу,нужно чтобы выводило что элемента нет, когда его нет в стеке. Вот код: Program xa; uses crt; type ...

создать стек в памяти из этих чисел таким образом, чтобы на вершине стека было самое большое число. Удалить из стека все отрицательные элементы.
Помогите решить. В файл записывается последовательность целых чисел. Прочитать последовательность из файла и создать стек в памяти из...

Удалить элемент, находящийся в середине стека, если число элементов нечётное, иначе - два средних элемента
ЗДРАВСТВУЙТЕ,ВОТ ЗАДАЧА: Удалить элемент, находящийся в середине стека , если число элементов нечетное, или 2 средних элемента, если...

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...)
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

Удалить элемент из стека по условию и добавить элемент в начало стека
Здравствуйте, помогите пожалуйста исправить(дописать) программы. 1). Нужно удалить элемент, находящийся в середине стека , если число...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru