1. Написать программу для работы со структурой данных "Двусвязный список".
2. Структура данных должна быть реализована на основе статической памяти.
3. Работа со структурой должна осуществляться с помощью case-меню. Предусмотреть
наглядную визуализацию содержимого структуры.
Другие языки программирования и технологии
Pascal, структура данных двусвязанный список
Только слепо не копируй, перепиши сам изменив под себя, а то препод нагуглит откуда ты это взял:
program DoublyLinkedList;
type
Node = record
Data: integer;
Next: ^Node;
Prev: ^Node;
end;
List = ^Node;
var
Head, Tail, NewNode: List;
Choice: integer;
procedure AddNode(var Head, Tail, NewNode: List);
begin
NewNode := new(List);
Write('Enter Data: ');
Readln(NewNode^.Data);
if Head = nil then begin
Head := NewNode;
Tail := NewNode;
NewNode^.Prev := nil;
end else begin
Tail^.Next := NewNode;
NewNode^.Prev := Tail;
Tail := NewNode;
end;
NewNode^.Next := nil;
end;
procedure DeleteNode(var Head, Tail: List; var DelNode: List);
var
Current: List;
begin
if DelNode^.Prev = nil then begin
Head := DelNode^.Next;
Head^.Prev := nil;
end else if DelNode^.Next = nil then begin
Tail := DelNode^.Prev;
Tail^.Next := nil;
end else begin
Current := DelNode^.Prev;
Current^.Next := DelNode^.Next;
Current := DelNode^.Next;
Current^.Prev := DelNode^.Prev;
end;
Dispose(DelNode);
end;
procedure ViewList(var Head: List);
var
Current: List;
begin
Current := Head;
while Current nil do begin
Writeln(Current^.Data);
Current := Current^.Next;
end;
end;
begin
Head := nil;
Tail := nil;
repeat
Writeln('1. Add Node');
Writeln('2. Delete Node');
Writeln('3. View List');
Writeln('4. Exit');
Writeln('Enter your choice: ');
Readln(Choice);
case Choice of
1: AddNode(Head, Tail, NewNode);
2: begin
Writeln('Enter node to be deleted: ');
Readln(NewNode^.Data);
DelNode := Head;
while DelNode^.Data NewNode^.Data do
DelNode := DelNode^.Next;
DeleteNode(Head, Tail, DelNode);
end;
3: ViewList(Head);
4: ;
end;
until Choice = 4;
end.
Двусвязный список в СТАТИЧЕСКОЙ памяти реализуется примерно так:
Фактически, в данной структуре два списка: двусвязный рабочий список, и односвязный список незанятых элементов (который надо инициализировать в начале работы). При добавлении в список берём первый элемент из списка незанятых и вставляем его в рабочий список. При удалении из списка удаляемый элемент вставляем в начало списка незанятых.
type list = record
head: integer; {индекс первого элемента списка в nodes}
tail: integer; {индекс последнего элемента списка в nodes}
current: integer; {индекс текущего элемента списка в nodes}
empty: integer; {индекс начала списка незанятых элементов в nodes}
nodes: array [1..1000] of record {массив элементов списка}
data: integer; {значение элемента списка}
next: integer; {индекс следующего элемента списка в nodes}
prev: integer; {индекс предыдущего элемента списка в nodes}
end
end;
Вместо указателей - индексы в массиве nodes. В данном случае максимальная длина списка ограничена 1000 элементов.Фактически, в данной структуре два списка: двусвязный рабочий список, и односвязный список незанятых элементов (который надо инициализировать в начале работы). При добавлении в список берём первый элемент из списка незанятых и вставляем его в рабочий список. При удалении из списка удаляемый элемент вставляем в начало списка незанятых.
Похожие вопросы
- Pascal, структура данных "Cтек"
- Запись в файл структуры данных. С++
- Что такое алгоритмы и структуры данных в информатике поясните простым языком чтобы было понятно для чего это вообще?
- Структура данных "очередь". максимально доступно. и очень подробно объяснить функции с очередью!!!на с++ с указателями
- Как правильно читать и стоит ли книгу Кормена "Алгоритмы и структуры данных". Что вы из неё советуете почерпнуть ?
- Можно ли изучать Алгоритмы и структуры данных без знаний языков программирования? Язык думал после этого осваивать.
- Каждый ли программист должен изучить алгоритмы и структуры данных?
- Паскаль Структура хранения и ведения следующих данных
- pascal or delphi
- Один вопрос по Pascal (или Object Pascal, или Delphi) (не надо ничего решать, просто один вопрос)