Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 35
1

Дан указатель P1 на первый элемент непустого двусвязного списка Продублировать в списке все элементы с нечетными значениями

23.01.2013, 19:30. Просмотров 2012. Ответов 3
Метки нет (Все метки)

Дан указатель P1 на первый элемент непустого двусвязного списка
Продублировать в списке все элементы с нечетными значениями
(новые элементы добавлять перед существующими элементами с такими же значениями)
Выручайте! Очень надеюсь на вашу помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2013, 19:30
Ответы с готовыми решениями:

Продублировать в списке все элементы с нечетными значениями
Здравствуйте, помогите пожалуйста решить! 6) Дан указатель P1 на первый элемент непустого...

Удалить из списка все элементы с нечётными значениями и вывести указатель p2 на начало преобразованного списка.
Здравствуйте. Не получается решить задачу. Условие. Дан непустой двусвязный список. Удалить из ...

Двусвязный список. Продублировать все элементы с нечетными значениями
Дано показатель Р1 на первый элемент непустого двухзвьязного списка. Продублировать в списке все...

Продублировать в списке все элементы с нечетными номерами
Дано указание Р1 на первый элемент непустого списка. Продублировать в списке все элементы с...

3
5967 / 2094 / 736
Регистрация: 10.12.2010
Сообщений: 5,914
Записей в блоге: 3
23.01.2013, 19:50 2
Если ваш двунаправленный список описан так:
Pascal
1
2
3
4
5
6
7
8
type
  PNode=^TNode;
 
  TNode=record
    Data:integer;
    Next:PNode;
    Prev:PNode;
  end;
То задачу можно решить например так:
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
procedure Double(var P1:PNode);
var
  i:PNode;
  temp:PNode;
begin
  i:=P1;
  while i<>nil do
  begin
    if not Odd(i^.Data) then
      begin
        if i<>P1 then { вставка в середину списка }
          begin
            New(temp);
            temp^.Data:=i^.Data;
            temp^.Prev:=i^.Prev;
            i^.Prev^.Next:=temp;
            temp^.Next:=i;
            i^.Prev:=temp;
          end
        else  { вставка перед первым элементом }
          begin
            New(temp);
            temp^.Data:=i^.Data;
            i^.Prev:=temp;
            temp^.Next:=i;
            temp^.Prev:=nil;
            P1:=temp;
          end;
      end;
    i:=i^.Next;
  end;
end;
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 35
23.01.2013, 21:21  [ТС] 3
HighPredator не могли бы вы написать полный код программы? пишу - но ошибки
0
5967 / 2094 / 736
Регистрация: 10.12.2010
Сообщений: 5,914
Записей в блоге: 3
23.01.2013, 21:54 4
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
type
  PNode=^TNode;
 
  TNode=record
    Data:integer;
    Next:PNode;
    Prev:PNode;
  end;
 
var
  i:integer;
  start:PNode;
 
{ добавление в конец списка }
procedure Add(var pBegin:PNode; const a:integer);
var
  p:PNode;
  i:PNode;
begin
  if pBegin=nil then
    begin
      New(pBegin);
      pBegin^.Data:=a;
      pBegin^.Next:=nil;
      pBegin^.Prev:=nil;
    end
  else
    begin
      i:=pBegin;
      while i^.Next<>nil do i:=i^.Next;
      New(p);
      i^.Next:=p;
      p^.Prev:=i;
      p^.Data:=a;
      p^.Next:=nil;
    end;
end;
 
procedure Print(const pBegin:PNode);
var
  i:PNode;
begin
  if pBegin<>nil then
    begin
      writeln('===== List =====');
      i:=pBegin;
      while i<>nil do
      begin
        write(i^.Data,' ');
        i:=i^.Next;
      end;
      writeln;
    end
  else writeln('List is empty');
end;
 
procedure Clear(var pBegin:PNode);
var
  i:PNode;
begin
  while pBegin<>nil do
  begin
    i:=pBegin^.Next;
    Dispose(pBegin);
    pBegin:=i;
  end;
end;
 
procedure Double(var P1:PNode);
var
  i:PNode;
  temp:PNode;
begin
  i:=P1;
  while i<>nil do
  begin
    if Odd(i^.Data) then
      begin
        if i<>P1 then { вставка в середину списка }
          begin
            New(temp);
            temp^.Data:=i^.Data;
            temp^.Prev:=i^.Prev;
            i^.Prev^.Next:=temp;
            temp^.Next:=i;
            i^.Prev:=temp;
          end
        else  { вставка перед первым элементом }
          begin
            New(temp);
            temp^.Data:=i^.Data;
            i^.Prev:=temp;
            temp^.Next:=i;
            temp^.Prev:=nil;
            P1:=temp;
          end;
      end;
    i:=i^.Next;
  end;
end;
 
 
begin
  { TODO -oUser -cConsole Main : Insert code here }
  Randomize;
  start:=nil;
  for i:=1 to 4 do Add(start,random(10));
  Print(start);
  Double(start);
  Print(start);
  Clear(start);
  readln;
end.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2013, 21:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Даны числа D1 и D2 и указатель P0 на один из элементов непустого двусвязного списка. Добавить в начало списка новый
Даны числа D1 и D2 и указатель P0 на один из элементов непустого двусвязного списка. Добавить в...

Удалить из списка все элементы с нечетными значениями
Дано указатель Р1 на первый элемент двозвязного списка, содержащего не менее двух элементов....

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

8. Написать программу, содержащую подпрограмму, которая копирует в конец непустого списка М его первый элемент. Если элементы не найдены, то выдать на
8. Написать программу, содержащую подпрограмму, которая копирует в конец непустого списка М его...


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

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

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