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

FiLo односвязный список

24.09.2013, 13:31. Показов 1285. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Имеется такая задача:
В FiLo на базе односвязного списка написать метод, позволяющий добавить элемент не в конец, а начало списка, так, чтобы он вышел первым.

Проверьте,пожалуйста,решение.

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
type
  TData = Char;
  TPElem = ^TElem;
  TElem = record
    Data : TData;
    PNext : TPElem;
  end;
 
 
procedure Init(var aPStack : TPElem);
begin
  aPStack := nil;
end;
 
procedure Push(var aPStack : TPElem; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  PElem^.Data := aData;
  PElem^.PNext := aPStack;
  aPStack := PElem;
end;
 
 
function Pop(var aPStack : TPElem; var aData : TData) : Boolean;
var
  PElem : TPElem;
begin
  Result := False;
  if aPStack = nil then Exit;
  PElem := aPStack;
  aPStack := PElem^.PNext;
  aData := PElem^.Data;
  Dispose(PElem);
  Result := True;
end;
 
procedure StackFree(var aPStack : TPElem);
var
  Data : TData;
begin
  while Pop(aPStack, Data) do;
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2013, 13:31
Ответы с готовыми решениями:

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

Односвязный и двусвязный список
Составить программу, которая из списка из n элементов удаляет в порядке просмотра каждый k-1-й...

Линейный односвязный список
Имеется упорядоченный по коду группы линейный односвязный список, содержащий сведения об учащихся...

Односвязный неупорядоченный список
Вобщем такая задачка: Односвязный неупорядоченный список(меню, модули) Написать следующие...

2
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
24.09.2013, 14:59 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
type
  PRecord = ^TRecord;
  TRecord = packed record
    FData: Char;
    FNext: PRecord;
  end;
 
var
  StackHead: PRecord = nil;
 
implementation
 
procedure TForm1.Button2Click(Sender: TObject);
var
  Item: PRecord;
begin
  // добавление элемента
  New(Item);
  Item^.FData:= #32;        // для примера
  // новый элемент будет ссылаться на текущий верхний либо на NIL, если стек еще пуст
  Item^.FNext:= StackHead;
  // обновляем головной элемент
  StackHead:= Item;
end;
Добавлено через 1 минуту
а при удалении либо выводе информации плясать от StackHead. так удобнее, IMHO

Добавлено через 19 минут
я сегодня добрый держи общий каркас приложения. надеюсь, все понятно
Кликните здесь для просмотра всего текста
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dwmapi, UxTheme,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  end;
 
  PRecord = ^TRecord;
  TRecord = packed record
    FData: Char;
    FNext: PRecord;
  end;
 
var
  Form1: TForm1;
  StackHead: PRecord = nil;
  i: Char = 'A';
 
implementation
 
{$R *.dfm}
 
// удаление "верхнего" элемента стека
procedure TForm1.Button1Click(Sender: TObject);
var
  Item: PRecord;
begin
  if StackHead <> nil then
  begin
    // получение верхнего элемента
    Item:= StackHead;
    // обновление "головы" стека
    StackHead:= Item^.FNext;
    // удаление
    Dispose(Item);
  end;
  // стек либо изначально пуст, либо может быть пустым
  // в результате удаления последнего элемента. Проверяем это
  if StackHead = nil then MessageDlg('Стек пуст!',mtInformation,[mbOk],0);
end;
 
// добавление элемента
procedure TForm1.Button2Click(Sender: TObject);
var
  Item: PRecord;
begin
  New(Item);
  Item^.FData:= i;   // для примера
  // новый элемент будет ссылаться на текущий верхний либо на NIL, если стек еще пуст
  Item^.FNext:= StackHead;
  // обновляем головной элемент
  StackHead:= Item;
  Inc(i);
end;
 
// вывод информации
procedure TForm1.Button3Click(Sender: TObject);
var
  Item: PRecord;
begin
  ListBox1.Clear;
  if StackHead = nil then Exit;
  // читаем первый элемент
  Item:= StackHead;
  // прогон всего цикла
  while Item <> nil do
  begin
    ListBox1.Items.Add(Item^.FData);
    Item:= Item^.FNext;
  end;
  // список, соответственно, будет выведен в обратном порядке (первым будет показан
  // последний добавленный элемент)
end;
 
// очистка стека
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  Item: PRecord;
begin
  if StackHead <> nil then
  repeat
    Item:= StackHead;
    StackHead:= Item^.FNext;
    Dispose(Item);
  until StackHead = nil;
end;
 
end.
1
3 / 3 / 0
Регистрация: 08.02.2013
Сообщений: 25
24.09.2013, 15:05  [ТС] 3
Благодарю!
0
24.09.2013, 15:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2013, 15:05
Помогаю со студенческими работами здесь

односвязный список, удаление элемента
Добрый день! Столкнулся с такой проблемой, создаю список(кнопка 1), далее хочу удалить нужный мне...

Односвязный список с возможность удаления и добавления элементов
Помогите пожалуйста. Нужно сделать программу в Delphi. Условие: Односвязный список с возможность...

Как вывести односвязный список в обратном порядке?
Всем привет. Подскажите, пожалуйста, как вывести односвязный список в обратном порядке.

Односвязный список: добавление элементов в начало и в конец
добавление элементов в начало функции и в конце с помошью функции прошу помоч. program Project1;...


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

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

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