Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.61
kolid
0 / 0 / 0
Регистрация: 30.06.2012
Сообщений: 12
#1

Создание Очереди - Delphi

01.07.2012, 21:56. Просмотров 6322. Ответов 18

Приветствую,помогите пожалуйста создать Прогу :
Разработать программу,позваляющую формировать динамическую структуру данных Очередь. Реализовать функцию добовления элементов очереди.Реализовать функцию удаления из очереди.Реализавать функцию вывода содержимого очереди.

За рание Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2012, 21:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание Очереди (Delphi):

В первой очереди найти максимальный элемент и за ним вставить элементы второй очереди - Delphi
задание:Создать две очереди из случайных целых чисел. В первой найти максимальный элемент и за ним вставить элементы второй очереди. ...

Заменить по очереди три слова test по очереди тремя строками из переменной Arr.Text - Delphi
Есть 3 строки в переменной Arr.Text (переменная типа TStringList) Есть 3 слова test в Memo1.Text Цель: Заменить по-очереди три...

Очереди - Delphi
Помогите, пожалуйста решить пример: Элемент структуры: вещественное число Структура данных: очередь

Делфи. Очереди - Delphi
Доброго времени суток. Дана задача: Создать очередь, информационные поля которой содержат числа из текстового файла file1.txt....

Очистка очереди - Delphi
Как с помощью Button5 очистить всю очередь? unit Unit1; interface uses Windows, Messages, SysUtils, Variants,...

Организация очереди - Delphi
Добрый день. Передомной постала задача в организации очереди, посмотрел я здесь, попробывал сделать и на процедуре Procedure Delete;...

18
UNDEADJ3THUO
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 13
25.05.2015, 16:16 #16
Mawrat, очень нужна помощь! Хорошая работа,но в моем случае задание таково : "Функции: создание очереди, удаление очереди, добавление нового элемента в очередь, удаление элемента из очереди". Если не трудно
можешь добавить в программу это?
0
Mawrat
12789 / 5696 / 672
Регистрация: 19.09.2009
Сообщений: 8,838
26.05.2015, 14:24 #17
Цитата Сообщение от UNDEADJ3THUO Посмотреть сообщение
Функции: создание очереди, удаление очереди, добавление нового элемента в очередь, удаление элемента из очереди
Решение в виде GUI приложения. Показ состояния очереди осуществляется с помощью экземпляра TStringGrid.
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
 
type
  //Тип основных данных.
  TData = String;
  //Тип указателя на элемент списка (это элемент очереди).
  TPElem = ^TElem;
  //Тип элемента списка (очереди).
  TElem = record
    Data : TData;   //Основные данные.
    PNext : TPElem; //Указатель на следующий элемент списка (очереди).
  end;
  //Очередь.
  TQueue = record
    PFirst, PLast : TPElem; //Указатели на первый и на последний элементы очереди.
  end;
 
  //Это объявление сделано для того, чтобы в пределах модуля стали доступными методы
  //из раздела protected класса TStringGrid. - Нам нужен метод TStringGrid.RowMoved().
  //Объяснение: По правилам Delphi, в модуле, где объявлен класс, становятся доступными
  //все унаследованные этим классом члены (поля, методы и свойства).
  TStringGrid = class(Grids.TStringGrid);
 
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
    FQueue : TQueue; //Очередь.
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TQueue }
 
//Добавление элемента в конец очереди.
procedure QueuePush(var aQ : TQueue; const aData : TData);
var
  P : TPElem;
begin
  New(P);                  //Выделяем память для элемента и указатель на него записываем в переменную P.
  P^.Data := aData;        //Запись основных данных.
  P^.PNext := nil;         //Обнуление указателя на следующий элемент.
  if aQ.PFirst = nil then  //Если список пуст,
    aQ.PFirst := P         //то новый элемент становится первым в списке.
  else                     //Иначе, если список не пустой,
    aQ.PLast^.PNext := P;    //то новый элемент прикрепляем за последним элементом списка.
  aQ.PLast := P;           //Новый элемент назначаем последним элементом списка.
end;
 
{Изъятие элемента из начала очереди.
Если очередь не пуста, то из её начала изымается элемент и возвращается
через параметр aData. В этом случае, функция возвращает значение True.
Если очередь пуста, то операция отменяется, а функция возвращает значение False.}
function QueuePop(var aQ : TQueue; var aData : TData) : Boolean;
var
  P : TPElem;
begin
  Result := False;          //Отмечаем, что действие пока не выполнено.
  if aQ.PFirst <> nil then  //Если список не пустой.
  begin
    P := aQ.PFirst;         //Запоминаем указатель на первый элемент списка.
    aData := P^.Data;       //Возвращаем данные первого элемента.
    aQ.PFirst := P^.PNext;  //Исключаем первый элемент из списка.
    if aQ.PFirst = nil then //Если список стал пустым,
      aQ.PLast := nil;        //то обнуляем указатель на последний элемент.
    Dispose(P);             //Освобождаем память, занятую под исключённый элемент.
    Result := True;         //Отмечаем, что действие выполнено.
  end;
end;
 
//Освобождение памяти, занятой для элементов очереди (очистка очереди).
procedure QueueFree(var aQ : TQueue);
var
  Data : TData;
begin
  while QueuePop(aQ, Data) do;
end;
 
{ TForm1 }
 
//Добавить элемент в конец очереди.
procedure TForm1.Button1Click(Sender: TObject);
var
  Data : TData;
  Sg : TStringGrid;
begin
  Data := Edit1.Text;
  if Data = '' then
  begin
    MessageBox(0, 'Значение не должно быть пустой строкой.', 'Повторите ввод',
      MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
 
  QueuePush(FQueue, Data);              //Добавляем элемент в конец очереди.
  //Показываем изменения в таблице.
  Sg := StringGrid1;                    //Ссылка на экземпляр типа TStringGrid.
  if Sg.Cells[0, 0] <> '' then          //Если таблица пустая,
    Sg.RowCount := Sg.RowCount + 1;       //то добавляем в её конец новую строку.
  Sg.Cells[0, Sg.RowCount - 1] := Data; //Запись данных в последнюю строку таблицы.
end;
 
//Извлечь элемент из начала очереди.
procedure TForm1.Button2Click(Sender: TObject);
var
  Data : TData;
  Sg : TStringGrid;
begin
  if QueuePop(FQueue, Data) then       //Извлекаем элемент из начала очереди.
  begin
    Edit1.Text := Data;                //Запись взятого элемента в Edit.
    //Показываем изменения в таблице.
    Sg := StringGrid1;                 //Ссылка на экземпляр типа TStringGrid.
    Sg.Rows[0].Clear;                  //Очистка верхней строки таблицы.
    if Sg.RowCount > 1 then            //Если в таблице более одной строки, то удаляем первую строку.
    begin
      Sg.RowMoved(0, Sg.RowCount - 1); //Перенос первой строки в конец таблицы.
      Sg.RowCount := Sg.RowCount - 1;  //Уменьшение числа строк таблицы на единицу.
    end;
  end;
end;
 
//Очистить очередь.
procedure TForm1.Button3Click(Sender: TObject);
begin
  QueueFree(FQueue); //Освобождение памяти, выделенной для элементов очереди.
  //Показываем изменения в таблице.
  StringGrid1.Cols[0].Clear; //Очистка первого столбца таблицы.
  StringGrid1.RowCount := 1; //Сброс количества строк.
end;
 
//Перед закрытием формы.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;  //Задаём действие - уничтожение формы.
  QueueFree(FQueue); //Освобождение памяти, выделенной для элементов очереди.
end;
 
end.
1
Миниатюры
Создание Очереди  
Вложения
Тип файла: 7z QueueDynListGUI-01.7z (179.6 Кб, 28 просмотров)
Mawrat
12789 / 5696 / 672
Регистрация: 19.09.2009
Сообщений: 8,838
27.05.2015, 07:41 #18
Вариант с показом изменений в Memo. В данном случае работа с Memo на много проще, чем со StringGrid.
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  //Тип основных данных.
  TData = String;
  //Тип указателя на элемент списка (это элемент очереди).
  TPElem = ^TElem;
  //Тип элемента списка (очереди).
  TElem = record
    Data : TData;   //Основные данные.
    PNext : TPElem; //Указатель на следующий элемент списка (очереди).
  end;
  //Очередь.
  TQueue = record
    PFirst, PLast : TPElem; //Указатели на первый и на последний элементы очереди.
  end;
 
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
    FQueue : TQueue; //Очередь.
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TQueue }
 
//Добавление элемента в конец очереди.
procedure QueuePush(var aQ : TQueue; const aData : TData);
var
  P : TPElem;
begin
  New(P);                  //Выделяем память для элемента и указатель на него записываем в переменную P.
  P^.Data := aData;        //Запись основных данных.
  P^.PNext := nil;         //Обнуление указателя на следующий элемент.
  if aQ.PFirst = nil then  //Если список пуст,
    aQ.PFirst := P         //то новый элемент становится первым в списке.
  else                     //Иначе, если список не пустой,
    aQ.PLast^.PNext := P;    //то новый элемент прикрепляем за последним элементом списка.
  aQ.PLast := P;           //Новый элемент назначаем последним элементом списка.
end;
 
{Изъятие элемента из начала очереди.
Если очередь не пуста, то из её начала изымается элемент и возвращается
через параметр aData. В этом случае, функция возвращает значение True.
Если очередь пуста, то операция отменяется, а функция возвращает значение False.}
function QueuePop(var aQ : TQueue; var aData : TData) : Boolean;
var
  P : TPElem;
begin
  Result := False;          //Отмечаем, что действие пока не выполнено.
  if aQ.PFirst <> nil then  //Если список не пустой.
  begin
    P := aQ.PFirst;         //Запоминаем указатель на первый элемент списка.
    aData := P^.Data;       //Возвращаем данные первого элемента.
    aQ.PFirst := P^.PNext;  //Исключаем первый элемент из списка.
    if aQ.PFirst = nil then //Если список стал пустым,
      aQ.PLast := nil;        //то обнуляем указатель на последний элемент.
    Dispose(P);             //Освобождаем память, занятую под исключённый элемент.
    Result := True;         //Отмечаем, что действие выполнено.
  end;
end;
 
//Освобождение памяти, занятой для элементов очереди (очистка очереди).
procedure QueueFree(var aQ : TQueue);
var
  Data : TData;
begin
  while QueuePop(aQ, Data) do;
end;
 
{ TForm1 }
 
//Добавить элемент в конец очереди.
procedure TForm1.Button1Click(Sender: TObject);
var
  Data : TData;
begin
  Data := Edit1.Text;
  if Data = '' then
  begin
    MessageBox(Handle, 'Значение не должно быть пустой строкой.', 'Повторите ввод',
      MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
 
  QueuePush(FQueue, Data); //Добавляем элемент в конец очереди.
  Memo1.Lines.Add(Data);   //Показываем изменения в Memo.
end;
 
//Извлечь элемент из начала очереди.
procedure TForm1.Button2Click(Sender: TObject);
var
  Data : TData;
begin
  if QueuePop(FQueue, Data) then //Извлекаем элемент из начала очереди.
  begin
    Edit1.Text := Data;          //Запись взятого элемента в Edit.
    Memo1.Lines.Delete(0);       //Показываем изменения в Memo.
  end;
end;
 
//Очистить очередь.
procedure TForm1.Button3Click(Sender: TObject);
begin
  QueueFree(FQueue); //Освобождение памяти, выделенной для элементов очереди.
  Memo1.Clear;       //Показываем изменения в Memo.
end;
 
//Перед закрытием формы.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;  //Задаём действие - уничтожение формы.
  QueueFree(FQueue); //Освобождение памяти, выделенной для элементов очереди.
end;
 
end.
1
Вложения
Тип файла: 7z QueueDynListGUI-02.7z (157.5 Кб, 39 просмотров)
UNDEADJ3THUO
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 13
31.05.2015, 01:16 #19
Mawrat, спасибо большое.
0
31.05.2015, 01:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2015, 01:16
Привет! Вот еще темы с ответами:

Упорядочивание очереди - Delphi
Cформировать очередь, содержащий целые числа. Упорядочить элементы очереди, не перемещая их. Вот несколько недель уже бьюсь над этой...

Моделирование очереди - Delphi
Помогите,пожалуйста,с программами. 1.Сформировать очередь из 6 чисел. Утроить сумму 3-го и 5-го элементов. 2.Сформировать...

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

Удалить N-й элемент очереди - Delphi
Доброго времени суток. Помогите решить вот такую задачу: Создать очередь из М случайных чисел, формируемых из интервала . Удалить N-й...


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

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

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