Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Delphi Определить попадание курсора в произвольную область Признаюсь, что поиск листал, но не нашёл ответа на свой вопрос. А вопрос заключается в реализации не четырёхугольного объекта на форме, mousemove которого наступает лишь при пересечении границы.... https://www.cyberforum.ru/ delphi-beginners/ thread526710.html Вычислить значение функции в зависимости от условия Delphi
Вычислить значение функции в зависимости от условия. В качестве f(x) использовать по выбору: sh(x), x2, ex. r=max(min(f(x),y),z)
Delphi Для поиска наименьшего элемента в произвольной строке матрицы использовать процедуру https://www.cyberforum.ru/ delphi-beginners/ thread526645.html
Помогите, пожалуйста!!! Не считает у, не могу понять почему, всю голову уже сломала. Для матрицы В (5 строк, 4 столбца) вычислить выражение У=5М1 + 4М2 +...+ 1М5, где Мk— значение наименьшего...
Delphi Замедляется работа многопоточной программы Написал небольшую програмку по этому уроку ( http://avtuh.ru/2010/10/10/delphi-videourok-mnogopotochnost-i-sinxronizaciya.html ), с начала работает отлично, но после обработки 5-6 тысяч ссылок резко... https://www.cyberforum.ru/ delphi-beginners/ thread526516.html
Цвета в VST Delphi
Помогите плиз, мне нужно, чтобы в VST уровни были разного цвета как это осуществить
Delphi Сортировка методом подсчета https://www.cyberforum.ru/ delphi-beginners/ thread526491.html
есть код для сортировки по возрастанию for i:=0 to 255 do C:=0; for i:=1 to N do C]:=C]+1; for i:=1 to 255 do C:=C+C; for i:=N downto 1 do begin B]]:=A; C]:=C]-1;
Delphi Перевод из разных систем счисления. https://www.cyberforum.ru/ delphi-beginners/ thread526411.html
Написал код для программы по переводу из 10-чной системы счисления в 2,8,16-ичные системы. все работает, но в 16-ричной после 10 идут буквы (A...F), а у меня числа. пытался через оператор "case"-не...
Delphi RichEdit
Наткнулся на статью о новой версии RichEdit: http://nonp.blogspot.com/2010/03/7-richedit.html И возник вопрос - а как бы этот новый RichEdit в Дельфи "вживить"? Пожалуйста, поподробнее напишите,...
Delphi Подскажите, как можно улучшить код для синтаксической подсветки? https://www.cyberforum.ru/ delphi-beginners/ thread526375.html
Есть следующий код предназначенный для синтаксической подсветки зарезервированных слов ассемблера и паскаля: function TForm1.CheckList(InString: string): boolean; var X: integer; begin ...
Delphi Разработать интерфейс и реализовать приложение на Delph1 7 https://www.cyberforum.ru/ delphi-beginners/ thread526371.html
Разработать интерфейс и реализовать приложение на Delph1 7, решающее задачи на 4 отдельных закладках: 1. Найти сумму первых N чётных натуральных чисел; 2. Среди всех чисел от 10 до 50 найти и...
Delphi дана целочисленная квадратная матрица порядка n
1.дана целочисленная квадратная матрица порядка n. Найти номера строк элементы в из которых одинаковы. 2. дано натуральное число n,действительно число х,действительная матрица размером n*2n....
Delphi Литерный вывод... Помогите пожалуйста, прога должна быть легкой, но я туплюю. Скажите хоть что нибудь, что помогло бы при написании. Задание: Напечатать график функций y=x^2-1 на отрезке с шагом 0,1 ,... https://www.cyberforum.ru/ delphi-beginners/ thread526346.html
13091 / 5872 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
25.03.2012, 05:00 0

Динамический однонаправленный список. Удаление элементов из списка. - Delphi - Ответ 2832648

25.03.2012, 05:00. Показов 5074. Ответов 2
Метки (Все метки)

Ответ

Delphi
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
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Windows;
 
type
  //Тип указателя на элемент списка.
  TPElem = ^TElem;
  //Тип элемента списка.
  TElem = record
    Data : String;
    PNext : TPElem; //Указатель на следующий элемент списка.
  end;
  //Тип, описывающий однонаправленный список.
  TList = record
    PFirst : TPElem; //Указатель на первый элемент списка.
    PLast : TPElem; //Указатель на последний элемент списка.
  end;
 
//Начальная инициализация списка. Внимание! Эту процедуру можно выполнять
//только в отношении пустого списка! Иначе - будут утечки памяти.
procedure Init(var aList : TList);
begin
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
//Добавление элемента в конец однонаправленного списка.
procedure AddL(var aList : TList; const aPElem : TPElem);
begin
  if aPElem = nil then Exit;
 
  aPElem^.PNext := nil;
  if aList.PFirst = nil then
    aList.PFirst := aPElem
  else
    aList.PLast^.PNext := aPElem
  ;
  aList.PLast := aPElem;
end;
 
(*
Исключение элемента из однонаправленного списка по указателю
на предыдущий элемент.
Функция возвращает указатель на элемент, который исключён из списка.
Если указатель на предыдущий элемент равен NIL, то исключается первый
элемент списка.
Эта функция только исключает элемент из списка. Если, кроме этого
требуется удалить элемент из памяти, тогда надо выполнить вызов
Dispose() за пределами процедуры.*)
function Del(var aList : TList; var aPPrev : TPElem) : TPElem;
begin
  Result := nil;
  if aList.PFirst = nil then Exit;
 
  if aPPrev = nil then begin
    Result := aList.PFirst;
    aList.PFirst := Result^.PNext;
  end else begin
    Result := aPPrev^.PNext;
    if Result <> nil then aPPrev^.PNext := Result^.PNext;
  end;
  if aList.PLast = Result then aList.PLast := aPPrev;
end;
 
//Удаление однонаправленного списка из памяти и инициализация.
procedure ListFree(var aList : TList);
var
  PNext, PDel : TPElem;
begin
  if aList.PFirst = nil then Exit;
 
  PNext := aList.PFirst;
  while PNext <> nil do begin
    PDel := PNext;
    PNext := PNext^.PNext;
    Dispose(PDel);
  end;
  aList.PFirst := nil;
  aList.PLast := nil;
end;
 
//Распечатка однонаправленного списка.
procedure ListPrint(const aList : TList);
var
  PElem : TPElem;
  i : Integer;
begin
  if aList.PFirst = nil then begin
    Writeln('Список пуст.');
    Exit;
  end;
 
  PElem := aList.PFirst;
  i := 0;
  while PElem <> nil do begin
    Inc(i);
    if i > 1 then Write(', ');
    Write(PElem^.Data);
    PElem := PElem^.PNext;
  end;
  Writeln;
end;
 
var
  L : TList;
  PElem, PPrev, PDel : TPElem;
  i : Integer;
  S : String;
begin
  //Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
  //Если после переключения русские буквы показываются неверно,
  //следует открыть системное меню консольного окна - щелчком мыши в левом
  //верхнем углу окна консоли и выбрать:
  //Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  //Начальная инициализация списка.
  Init(L);
 
  repeat
    //Создание списока.
    Writeln('Создание списка.');
    Writeln('Прекратить ввод - пустая строка + Enter.');
    i := 0;
    repeat
      Write('Элемент ', i + 1, ': ');
      Readln(S);
      if S = '' then Continue;
      Inc(i);
      New(PElem);
      PElem^.Data := S;
      AddL(L, PElem);
    until S = '';
    Writeln('Составлен список:');
    ListPrint(L);
 
    Writeln('Задайте имя, которое следует удалить из списка:');
    Readln(S);
    //Удаляем из списка все элементы с заданным текстом.
    PPrev := nil; //Указатель на предыдущий элемент.
    PElem := L.PFirst; //Указатель на текущий элемент.
    while PElem <> nil do begin
      if PElem^.Data = S then begin //Удаление элемента и переход к следующему.
        PDel := Del(L, PPrev);
        PElem := PDel^.PNext;
        Dispose(PDel);
      end else begin //Переход к следующему элементу.
        PPrev := PElem;
        PElem := PElem^.PNext;
      end;
    end;
 
    Writeln('Cписок после удаления:');
    ListPrint(L);
 
    //Удаление списка из памяти.
    ListFree(L);
    Writeln('Список удалён из памяти. Работа завершена.');
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.


Вернуться к обсуждению:
Динамический однонаправленный список. Удаление элементов из списка. Delphi
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2012, 05:00
Готовые ответы и решения:

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

Однонаправленный список. Удаление
У меня вопрос. Есть однонаправленный (динамический) список. Как сделать так, чтобы по нажатию...

Список: Удаление всех подряд идущих одинаковых элементов из списка
Помогите пожалуйста реализовать процедуру удаления всех подряд идущих одинаковых элементов из...

Динамический список. Удаление
Добрый день! Вопрос по удалению, т.к. не был найден ответ в похожих темах. Используется два модуля....

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2012, 05:00
Помогаю со студенческими работами здесь

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

Линейный однонаправленный список. Удаление элементов
Создать линейный однонаправленный список. Удалить из него все символы 'p' перед символом 'a'....

Реализуйте однонаправленный список.Режим сортировки элементов списка без перестановки самих элементов
Реализуйте задание .В каждом из вариантов должно быть реализованы следующие режимы работы:...

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

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