Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Динамический список

Delphi , Компоненты и Классы , Списки

Динамический список

unit dlist1_;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit; // фамилия
    Edit2: TEdit; // имя
    Button1: TButton; // кнопка Добавить
    Button2: TButton; // кнопка Показать
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

type
  TPStudent = ^TStudent; //указатель на тип TStudent

  TStudent = record
    f_name: string[20]; // фамилия
    l_name: string[20]; // имя
    next: TPStudent; // следующий элемент списка
  end;

var
  head: TPStudent; // начало (голова) списка

// добавить элемент в начало списка

procedure TForm1.Button1Click(Sender: TObject);
var
  curr: TPStudent; // новый элемент списка
begin
  new(curr); // выделить память для элемента списка
  curr^.f_name := Edit1.Text;
  curr^.l_name := Edit2.Text;

   // добавление в начало списка
  curr^.next := head;
  head := curr;

   // очистить поля ввода
  Edit1.text := '';
  Edit2.text := '';
end;

// вывести список

procedure TForm1.Button2Click(Sender: TObject);
var
  curr: TPStudent; // текущий элемент списка
  n: integer; // длина (кол-во элементов) списка
  st: string; // строковое представление списка
begin
  n := 0;
  st := '';
  curr := head; // указатель на первый элемент списка
  while curr <> nil do
  begin
    n := n + 1;
    st := st + curr^.f_name + ' ' + curr^.l_name + #13;
    curr := curr^.next; // указатель на следующий элемент
  end;

  if n <> 0
    then ShowMessage('Список:' + #13 + st)
  else ShowMessage('В списке нет элементов.');
end;

end.
Скачать весь проект

Here is the translation of the content into Russian:

Динамическая список Код реализует динамический список (связанный список) в Delphi, где каждый узел представляет собой студента с именем, фамилией и указателем на следующий узел. Список может быть динамически расширен добавлением новых узлов в начало.

Имущества 1. Объявления типов: Хорошая практика объявлять типы на верхнем уровне модуля, а не внутри секций реализации. 2. Обработка ошибок: В процедуре Button1Click нет обработки ошибок при случаях неудачной памяти. Рекомендуется использовать GetMem с fReleaseMemory установленным в True или проверять результат New. 3. Организация кода: Код в процедурах Button1Click и Button2Click слишком длинный и может быть разбит на более маленькие процедуры. 4. Именование переменных: Некоторые имена переменных, такие как curr, не очень описательны. Рекомендуется использовать более значимые имена, такие как newStudent или currentNode. 5. Стиль кода: Есть некоторые несоответствия в отступах и форматировании кода.

Альтернативное решение Вместо использования связанного списка можно рассмотреть использование TList<TStudent> или TStringList с пользовательскими записями как элементами. Это упрощает реализацию и предоставляет более функций (например, случайный доступ к элементам). Вот пример использования TList<TStudent>:

type
  TStudent = record
    fName: string;
    lName: string;
  end;

var
  StudentList: TList<TStudent>;

procedure TForm1.Button1Click(Sender: TObject);
begin
  StudentList.Add(TStudent.Create(Edit1.Text, Edit2.Text));
  Edit1.Text := '';
  Edit2.Text := '';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if StudentList.Count > 0 then
    ShowMessage('Список:' + #13 + string.Join(#13, StudentList.Map(TStudentToName)))
  else
    ShowMessage('В списке нет элементов.');
end;

function TStudentToName(const student: TStudent): string;
begin
  Result := student.fName + ' ' + student.lName;
end;

В этом примере TStudent - это запись с двумя полями (fName и lName). Процедура Button1Click создает новый объект TStudent и добавляет его в список. Процедура Button2Click отображает сообщение с строковым представлением списка. Обратите внимание, что это решение требует Delphi 2009 или более поздней версии, так как TList была введена в этой версии.

Статья описывает создание динамического списка в Delphi с помощью рекурсивного указателя на тип TStudent.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Списки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-08 18:27:07/0.0060319900512695/1