Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
goodini
0 / 0 / 0
Регистрация: 16.02.2012
Сообщений: 17
1

Добавление и удаление элементов в список

18.06.2013, 19:49. Просмотров 3776. Ответов 1
Метки нет (Все метки)

Помогите написать программу, которая заполняет элементами типизированного файла целочисленный односвязный список, распечатывает его на экране. Программа позволяет вставлять, удалять и добавлять новые элементы по желанию пользователя и выводит на экран измененный список.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2013, 19:49
Ответы с готовыми решениями:

Создать односвязный список типа стек, произвести удаление и добавление элемента
Создать односвязный список типа стек. Заменить последний элемент на другой вводимый с ...

Однонаправленный список. Вывод элементов, списка. Удаление списка.
Создать однонаправленный список натуральных чисел. Найти и вывести элементы списка, кратные 3....

Добавление, удаление записей
Некорректно удалением записей. Как сделать ее корректной? Кол-во записей выставлено 3, потом можно...

добавление и удаление эл-ов из динам. памяти
В следующей программе надо удалить все элементы кратные 5 и перед числами кратными 3 добавить 0! ...

Добавление, редактирование и удаление записи из файла
Помогите решить пожалуйста 3 вариант задачи, не могу ни как понять. В лабораторной работе...

1
Mawrat
12853 / 5756 / 1701
Регистрация: 19.09.2009
Сообщений: 8,807
18.06.2013, 22:53 2
Лучший ответ Сообщение было отмечено goodini как решение

Решение

Вот пример, но он без работы с файлом.
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
program Project1;
 
type
  {Тип основных данных.}
  TData = Integer;
  {Указатель на элемент списка.}
  TPElem = ^TElem;
  //Элемент списка.
  TElem = record
    Data : TData; {Основные данные.}
    PNext : TPElem; {Указатель на следующий элемент.}
  end;
  //Список.
  TDList = record
    Cnt : Integer; {Количество элементов в списке.}
    PFirst, PLast : TPElem; {Указатели на первый и на последний элементы списка.}
  end;
 
{Процедура инициализации списка. Внимание! Эту процедуру можно выполнять
только в отношении пустого списка. Иначе, произойдёт утечка памяти.}
procedure Init(var aList : TDList);
begin
  aList.Cnt := 0;
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
{Добавление элемента в конец списка.}
procedure Add(var aList : TDList; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  PElem^.Data := aData;
  PElem^.PNext := nil;
  if aList.PFirst = nil then
    aList.PFirst := PElem
  else
    aList.PLast^.PNext := PElem;
  aList.PLast := PElem;
  Inc(aList.Cnt);
end;
 
{Освобождение памяти, занятой под список.}
procedure ListFree(var aList : TDList);
var
  PElem, PDel : TPElem;
begin
  PElem := aList.PFirst;
  while PElem <> nil do begin
    PDel := PElem;
    PElem := PElem^.PNext;
    Dispose(PDel);
  end;
  Init(aList);
end;
 
{Распечатка всего списка.}
procedure LWriteln(var aList : TDList);
var
  PElem : TPElem;
  i : Integer;
begin
  PElem := aList.PFirst;
  i := 0;
  while PElem <> nil do begin
    Inc(i);
    if i > 1 then Write(', ');
    Write(PElem^.Data);
    PElem := PElem^.PNext;
  end;
  if i = 0 then
    Writeln('Список пуст.')
  else
    Writeln;
end;
 
{Удаление элемента из однонаправленного списка по указателю на предыдущий элемент.
Если указатель на предыдущий элемент равен NIL, то удаляется первый элемент списка.}
procedure Del(var aList : TDList; var aPPrev : TPElem);
var
  PDel : TPElem;
begin
  if aList.PFirst = nil then Exit;
 
  if aPPrev = nil then begin
    PDel := aList.PFirst;
    aList.PFirst := PDel^.PNext;
  end else begin
    PDel := aPPrev^.PNext;
    if PDel <> nil then
      aPPrev^.PNext := PDel^.PNext;
  end;
  if aList.PLast = PDel then
    aList.PLast := aPPrev;
  if PDel <> nil then begin
    Dispose(PDel);
    Dec(aList.Cnt);
  end;
end;
 
{Удаление из списка элементов с заданным значением.}
function DelByVal(var aList : TDList; const aData : TData) : Integer;
var
  PElem, PPrev : TPElem;
  Cnt : Integer;
begin
  Cnt := 0;
  PPrev := nil; {Указатель на предыдущий элемент.}
  PElem := aList.PFirst; {Указатель на текущий элемент.}
  while PElem <> nil do begin
    if PElem^.Data = aData then begin
      {Переход к следующему элементу надо выполнить перед вызовом Del(),
      потому что процедура Del() удалит текущий элемент.}
      PElem := PElem^.PNext;
      Del(aList, PPrev);
      Inc(Cnt);
    end else begin
      PPrev := PElem;
      PElem := PElem^.PNext;
    end;
  end;
  DelByVal := Cnt; {Количество удалённых элементов.}
end;
 
{Добавление элементов в список.}
procedure WorkAdd(var aList : TDList);
var
  S : String;
  Data : TData;
  Code : Integer;
begin
  Writeln('Добавление элементов в список.');
  Writeln('Ввод каждого значения завершайте нажатием Enter.');
  Writeln('Чтобы прекратить ввод, оставьте пустую строку и нажмите Enter.');
  repeat
    Write('Элемент №', aList.Cnt + 1, ': ');
    Readln(S);
    if S <> '' then begin
      Val(S, Data, Code);
      if Code = 0 then
        Add(aList, Data)
      else
        Writeln('Неверный ввод. Повторите.');
    end;
  until S = '';
  Writeln('Ввод элементов списка завершён.');
end;
 
var
  L : TDList;
  Data : TData;
  Cmd, Code, Cnt : Integer;
  S : String;
begin
  {Начальная инициализация списка.}
  Init(L);
 
  repeat
    {Меню.}
    Writeln('Выберите действие:');
    Writeln('1: Добавление элементов в список.');
    Writeln('2: Распечатка всего списка.');
    Writeln('3: Проверка списка на пустоту.');
    Writeln('4: Удаление элементов по условию.');
    Writeln('5: Очистка списка.');
    Writeln('6: Выход.');
    Write('Введите команду: ');
    Readln(Cmd);
    case Cmd of
      1: WorkAdd(L);
      2:
      begin
        Writeln('Содержимое списка:');
        LWriteln(L);
      end;
      3:
        if L.PFirst = nil then
          Writeln('Список пуст.')
        else
          Writeln('Список непустой.');
      4:
      begin
        Writeln('Элементы с заданным значением будут удалены из списка.');
        Writeln('Чтобы отменить операцию оставьте пустую строку и нажмите Enter.');
        repeat
          Write('Значение: ');
          Readln(S);
          if S <> '' then begin
            Val(S, Data, Code);
            if Code = 0 then begin
              Cnt := DelByVal(L, Data);
              Writeln('Количество удалённых элементов: ', Cnt);
            end else
              Writeln('Неверный ввод. Повторите.');
          end;
        until S = '';
      end;
      5, 6:
      begin
        ListFree(L);
        Writeln('Список удалён из памяти (очищен).');
      end;
      else
        Writeln('Незарегистрированная команда. Повторите ввод.');
    end;
  until Cmd = 6;
 
  Writeln('Работа программы завершена. Для выхода нажмите Enter.');
  Readln;
end.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2013, 22:53

Добавление элемента в список
Если элемент списка&lt;0, тогда после него необходимо добавить 0.

Добавление информации в список
Помогите пожалуйста решить задачку Господа Пусть дан упорядоченный список названия книг....

Список: добавление и удаление элементов
Здравствуйте, мне нужно реализовать список и написать добавление и удаление элементов,но...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru