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

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

05.05.2015, 00:18. Показов 11850. Ответов 1
Метки нет (Все метки)

Капец как срочно надо написать программу:
(Все взял как в книге написано)
Напишите алгоритм и программу на языке Паскаль, выполняющую каждую из операций упр. 4.2.4 применительно к циклическим спискам. Какой из них более эффективен для циклических списков и какой менее.
Напишите алгоритм и программу на языке Паскаль, выполняющие следующие операции
1)Добавление элемента к концу списка
2)Сцепление двух списков
3)Освобождение всех эл. в списке
4)Инвертирование списка, при котором первый эл. становится последним и т.д.
5)Удаление последнего эл. из списка
6)Удаление н-ного эл. из списка

Если кто может или материал по данной теме подсказать, пожалуйста, прям нереально срочно!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2015, 00:18
Ответы с готовыми решениями:

Добавление элемента в конец списка
Помогите, пожалуйста. Напишите программу добавления элемента в конец односвязного списка(без...

Добавление элемента в конец списка
Сначала добавляет первый элемент, а далее не хочет? Посмотрите свежим глазом, а то я лагаю! void...

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

Добавление элемента в конец списка
type ТЭ=...(тип элемента списка) список=^звено; звено:record элем:ТЭ; след:список; end;...

1
0 / 0 / 1
Регистрация: 20.05.2015
Сообщений: 5
20.05.2015, 15:47 2
Лучший ответ Сообщение было отмечено kolykamkam как решение

Решение

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
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
uses
  crt;
 
const
  n = 4;
 
type
  data = integer;// тип данных
  spisok = ^spisoktype;// указатель
  spisoktype = record // элемент
    number: data; //данные
    next: spisok; // указатель на следующий элемент
  end;
 
var
  tek, tek1: spisok; // текущие указатели
  first, last: spisok; // указатели на первый и последний элементы списка
  answer: integer;
  i, c: word;
 
{вставка элемента в конец}
procedure addlast(var tek, last: spisok; j: word);
var
  point: spisok; {указатель на создаваемый элемент}
  t: spisok;{указатель для просмотра списка}
begin
  New(Point);{создание элемента}
  writeln('Введите элемент: ');
  readln(point^.number);{заполнение данных}
  writeln;
  point^.next := nil;
  if tek = nil then begin{если список был пуст}
    
    tek := point;
    first := tek;
  end 
  else begin{если список не пуст}
    t := tek;
    while (t^.next <> nil) do
      t := t^.next;
    t^.next := point;
    last := point;
  end;
  writeln('Элемент успешно добавлен!');
  writeln;
  
end;
 {вывод всех элементов}
procedure print(var tek: spisok; const first: spisok);
var
  
  d: word;
begin
  d := 0;
  tek := first;
  Writeln('Содержимое списка:');
  if tek = nil then 
    writeln('Список пуст. ')
  else
    while tek <> nil do 
    begin
      inc(d);
      writeln(d, ' элемент списка: ', tek^.number);
      tek := tek^.next;
    end;
end;
 
{Удаление последнего элемента}
procedure dellast(var tek: spisok; var first, last: spisok);
begin
  tek := first;
  {задача указателя  - достичь предпоследнего элемента списка, то есть
   встать перед удаляемым элементом}
  if (tek^.next = nil) then {если в списке остался только один элемент}
    first := nil else
    while (tek^.next^.next <> nil) do
      {переход на следующий элемент}   
      tek := tek^.next;
  {Удаляем последний элемент из списка и освобождаем занимаемую им память}
  dispose(tek^.next);
  {и чтобы список остался в согласованном состоянии, надо, чтобы последний
   элемент (до удаления он являлся предпоследним) ссылался в NIL}
  tek^.next := nil;
  writeln('Элемент успешно удален!');
  writeln;
end;
 {удаление n-го элемента списка}
procedure deln(var tek, first, last: spisok);
var
  key: word; prev, del: spisok;
 
begin
  prev := nil;
  tek := first;
  writeln('Введите значение удаляемого элемента: ');
  
  readln(key); // ключ для поиска элемента
  writeln;
  while tek <> nil do 
    if tek^.number = key then begin{Если обнаружен элемент, который требуется удалить}
      if tek = first then {Если удаляемый элемент является первым элементом списка, то первым элементом списка назначаем следующий элемент}
        first := tek^.next
      {Если удаляемый элемент не является первым элементом списка, то поле
      Next предыдущего элемента теперь должно указывать на элемент, который
      является следующим относительно tek}
      else
        prev^.next := tek^.next;
      {Если удаляемый элемент является последним элементом списка, то последним
           элементом списка назначаем предыдущий элемент}
      if tek = last then
        last := prev; {Указатель на удаляемый элемент}
      del := tek;{Указатель на следующий элемент}
      Dispose(Del); {Освобождение памяти, занятой под элемент}
    end
    else {Переход к следующему элементу списка.}
    begin
      prev := tek;
      tek := tek^.next;
    end;
  writeln('Элемент успешно удален!');
  writeln;
end;
 {сцепление двух списков}
procedure interflow(var tek, tek1, first: spisok);
var
  pred1, first1: spisok;
  f, o, n, g: word;
begin
  
  writeln;
  writeln('Чтобы выполнить сцепление сначала заполните второй список!');
  writeln;
  writeln('Сколько элементов вставляем? '); 
  readln(f);
  writeln;
  new(tek1); // заполнение второго списка
  writeln;
  writeln('Введите элемент: ');
  writeln;
  readln(tek1^.number);
  tek1^.next := nil;
  
  first1 := tek1;
  pred1 := tek1;
  
  for o := 2 to f do 
  begin
    new(tek1);
    writeln('Введите элемент: ');
    writeln;
    pred1^.next := tek1;
    readln(tek1^.number);
    tek1^.next := nil;
    pred1 := tek1;
  end;
  writeln;
  writeln('Первый список: ');
  writeln;
  print(tek, first);
  writeln;
  writeln('Второй список: ');
  writeln;
  n := 0; // вывод второго списка на экран
  tek1 := first1;
  if tek1 = nil then 
    writeln('Список пуст. ')
  else
    while tek1 <> nil do 
    begin
      inc(n);
      writeln(n, ' элемент списка: ', tek1^.number);
      tek1 := tek1^.next;
    end;
    // сцепление первого и второго списков
  tek := first;
  while (tek^.next <> nil) do tek := tek^.next;
  
  tek^.next := first1; {последний элемента первого списка указывает на начало второго}
  tek1 := nil; {анулирование второго списка}
  // вывод сцепленного списка
  writeln;
  writeln('Сцепление: ');
  writeln;
  g := 0;
  tek := first;
  Writeln('Содержимое списка:');
  if tek = nil then 
    writeln('Список пуст. ')
  else
    while tek <> nil do 
    begin
      inc(g);
      writeln(g, ' элемент списка: ', tek^.number);
      tek := tek^.next;
    end;
end;
{Освобождение всех элементов списка}
procedure releaseall(var tek, first: spisok);
var
  temp: spisok;
begin
  tek := first; {указатель на первый элемент}
  while (tek <> nil) do {начинаем просмотр списка от начала до конца}
  begin
    temp := tek^.next; {запоминаем следующий элемент}
    dispose(tek); {освобождаем память текущего}
    tek := temp; {делаем следующий элемент первым(текущим)}
  end;
  first := nil; 
  writeln;
  writeln('Все элементы списка успешно освобождены!');
  writeln;
end;
{инвертирование списка}
procedure invert(var tek, first, last: spisok);
var
  p, t: spisok;
begin
  p := nil;
  last := first;
  while first <> nil do 
  begin
    t := first^.next;
    first^.next := p;
    p := first;
    first := t;
  end;
  first := p;
  writeln;
  writeln('Список успешно инвертирован!');
  writeln;
end;
 
begin
  repeat
    writeln;
    writeln('Выберете пункт меню:');
    writeln;
    writeln('1: Вставка элемента в конец списка');
    writeln('2: Вывод всех элементов на экран');
    writeln('3: Удаление последнего элемента из списка');
    writeln('4: Удаление n-го элемента из списка');
    writeln('5: Сцепление двух списков');
    writeln('6: Освобождение всех элементов списка');
    writeln('7: Инвентировать список');
    writeln('0: Выход');
    writeln;
    readln(answer);
    writeln;
    case answer of 
      1: 
        begin
          writeln('Сколько элементов вставляем? '); 
          readln(c);
          writeln;
          for i := 1 to c do 
            addlast(tek, last, i); 
        end;
      2: print(tek, first);
      
      3: dellast(tek, first, last);
      4: deln(tek, first, last);
      5: 
        begin// проверка на заполненость первого списка
          if first = nil then begin
            writeln;
            writeln('Ошибка, сначала заполните первый список!');
          end else interflow(tek, tek1, first); end;
      6: releaseall(tek, first);   
      7: 
        begin// проверка на заполненость списка
          if (first = nil) or (first^.next = nil) then begin
            writeln;
            writeln('Ошибка, список пуст или имеет один элемент!');
          end else invert(tek, first, last);  end;
    
    end;
  until (answer = 0);
  
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2015, 15:47
Помогаю со студенческими работами здесь

Добавление элемента в конец списка
procedure AddLast(value: string); {Dobavlenie elementa v konec spiska} var Item: PList; begin...

Добавление элемента в начало списка
Проблема в том, что выводит 100, 9. Почему не выводит промежуточные значения - не понятно. Вроде бы...

Добавление элемента в середину списка
на данный момент реализована функция добавления в конец списка void addToList (char data) { List...

Добавление элемента в начало списка
Procedure AddToEnd(i:integer; var head:Tlist); //добавление элемента в конец списка i-...


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

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

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