Программа для создания двусвязных кольцевых списков

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

p;

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

Как оказалось, связанные списки - это наиболее подходящая структура для динамических данных, т.к. они могут иметь переменное количество элементов. Затраты производительности при работе со списками незначительны по сравнению с той экономией памяти и гибкостью, которые они предоставляют.

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

 

 

ПРИЛОЖЕНИЕ

 

// UnitFourthPlex.pas //UnitFourthPlex;

interfac

uses Grids;

TMember = record: string[32];: string[32];: string[32];: string[32];;

TNodePtr = ^TNode;

TNode = record: TMember;

NextFirst: TNodePtr;: TNodePtr;: TNodePtr;: TNodePtr;;

TPlex = class: TNodePtr;: TNodePtr;: TNodePtr;: TNodePtr;

fCount: integer;

fNumberPointer: integer;

procedure SwapLinks(left, right: integer);AddToSecondList(newNode: TNodePtr);AddToThirdList(newNode: TNodePtr);AddToFourthList(newNode: TNodePtr);RemoveFromSecondList(node: TNodePtr);RemoveFromThirdList(node: TNodePtr);RemoveFromFourthList(node: TNodePtr);

public

function Get_pointer(Node: TNodePtr): TNodePtr;Get_head: TNodePtr;Set_return_pointer(attribute: integer);

procedure Print_to_Grid(Grid: TStringGrid);GetI(index: integer): TNodePtr;

procedure Add(value: TMember);AddToIndex(Value: TMember; Index: integer);Del(index: integer);Sort(attribute: integer);Clear;

property Count: integer read fCount;;

implementation

uses SysUtils;

function TPlex.Get_pointer(node: TNodePtr): TNodePtr;

case fNumberPointer of

: result := Node.NextFirst;

: result := Node.NextSecond;

: result := Node.NextThird;

: result := Node.NextFourth;;

end;

function TPlex.Get_head: TNodePtr;

case fNumberPointer of

: result := fFirstHead;

: result := fSecondHead;

: result := fThirdHead;

: result := fFourthHead;;

end;

procedure TPlex.Set_return_pointer(attribute: integer);:= attribute;;

procedure TPlex.Print_to_Grid(Grid: TStringGrid);curNode: TNodePtr;

if fCount = 0 then.FixedRows := 0;.RowCount := 1;;;

Grid.RowCount := 2;.FixedRows := 1;

curNode := Get_head;

with Grid do

nildocurNode.Valuedo[0,RowCount-1]:=Surname;[1,RowCount-1]:=XDCode;[2,RowCount-1]:=SignXD;[3,RowCount-1]:=City;">while curNode <> nil docurNode.Value do[0,RowCount - 1] := Surname;[1,RowCount - 1] := XDCode;[2,RowCount - 1] := SignXD;[3,RowCount - 1] := City;

RowCount := RowCount + 1;;

curNode := Get_pointer(curNode);;

RowCount := RowCount - 1;

end;;

procedure TPlex.Add(value: TMember);newNode: TNodePtr;: TNodePtr;

fCount := fCount + 1;

new(newNode);.Value := value;

newNode.NextFirst := nil;.NextSecond := nil;.NextThird := nil;.NextFourth := nil;

if fFirstHead = nil then:= newNode;:= newNode;:= newNode;:= newNode;;;

curNode := fFirstHead;

nildo:=curNode.NextFirst;;">while curNode.NextFirst <> nil do:= curNode.NextFirst;;

curNode.NextFirst := newNode;

AddToSecondList(newNode);(newNode);(newNode);;

procedure TPlex.AddToSecondList(newNode: TNodePtr);: TNodePtr;

newNode.Value.XDCode)then.NextSecond:=fSecondHead;:=newNode;;;">if(fSecondHead.Value.XDCode > newNode.Value.XDCode) then.NextSecond := fSecondHead;:= newNode;;;

curNode := fSecondHead;

nil)and">while (curNode.NextSecond <> nil) and

(curNode.NextSecond.Value.XDCode < newNode.Value.XDCode) do:= curNode.NextSecond;;

newNode.NextSecond := curNode.NextSecond;.NextSecond := newNode;

end;

procedure TPlex.AddToThirdList(newNode: TNodePtr);: TNodePtr;

newNode.Value.SignXD)then.NextThird:=fThirdHead;:=newNode;;;">if(fThirdHead.Value.SignXD > newNode.Value.SignXD) then.NextThird := fThirdHead;:= newNode;;;

curNode := fThirdHead;

nil)and">while (curNode.NextThird <> nil) and

(curNode.NextThird.Value.SignXD < newNode.Value.SignXD) do:= curNode.NextThird;;

newNode.NextThird := curNode.NextThird;.NextThird := newNode;

end;

procedure TPlex.AddToFourthList(newNode: TNodePtr);: TNodePtr;

newNode.Value.City)then.NextFourth:=fFourthHead;:=newNode;;;">if(fFourthHead.Value.City > newNode.Value.City) then.NextFourth := fFourthHead;:= newNode;;;

curNode := fFourthHead;

nil)and">while (curNode.NextFourth <> nil) and

(curNode.NextFourth.Value.City < newNode.Value.City) do:= curNode.NextFourth;;

newNode.NextFourth := curNode.NextFourth;.NextFourth := newNode;

end;

procedure TPlex.Del(index: integer);i: integer;: TNodePtr;

if(index >= fCount) then;

if index = 0 then

RemoveFromSecondList(fFirstHead);:= fFirstHead.NextFirst;;

curNode := fFirstHead;

for i := index - 2 downto 0 do:= curNode.NextFirst;

RemoveFromSecondList(curNode.NextFirst);(curNode.NextFirst);(curNode.NextFirst);

curNode.NextFirst := curNode.NextFirst.NextFirst;;

end;

procedure TPlex.RemoveFromSecondList(node: TNodePtr);: TNodePtr;

if fSecondHead = node then:= fSecondHead.NextSecond;;;

curNode := fSecondHead;

nodedo:=curNode.NextSecond;">while curNode.NextSecond <> node do:= curNode.NextSecond;

curNode.NextSecond := curNode.NextSecond.NextSecond;

end;

procedure TPlex.RemoveFromThirdList(node: TNodePtr);: TNodePtr;

if fThirdHead = node then:= fThirdHead.NextThird;;;

curNode := fThirdHead;

nodedo:=curNode.NextThird;">while curNode.NextThird <> node do:= curNode.NextThird;

curNode.NextThird := curNode.NextThird.NextThird;;

procedure TPlex.RemoveFromFourthList(node: TNodePtr);: TNodePtr;

if fFourthHead = node then:= fFourthHead.NextFourth;;;

curNode := fFourthHead;

nodedo:=curNode.NextFourth;">while curNode.NextFourth <> node do:= curNode.NextFourth;

curNode.NextFourth := curNode.NextFourth.NextFourth;;

procedure TPlex.Sort(attribute: integer );i: integer;: boolean;

if Count < 2 then;

swap := true;swap do

swap := false;

GetI(i+1).Value.Surnamethen:=true;(i,i+1);;">for i := 0 to Count - 2 doGetI(i).Value.Surname > GetI(i + 1).Value.Surname then:= true;(i, i + 1);;

for i := Count - 1 to 1 doGetI(i).Value.Surname < GetI(i - 1).Value.Surname then:= true;(i - 1, i);;;;

=Count)or(index= Count) or (index < 0) then;

curNode := fFirsthead;

for I := 0 to index - 1 do:= curNode.NextFirst;;

result := curNode;;

TPlex.SwapLinks(left, right: integer);leftNode, rightNode : TNodePtr;:= GetI(left);:= GetI(right);

if (left = 0) then.NextFirst := rightNode.NextFirst;.NextFirst := leftNode;

fFirstHead := rightNode;.NextFirst := rightNode.NextFirst;.NextFirst := leftNode;

GetI(left - 1).NextFirst := rightNode;;

end;

procedure TPlex.Clear;

fCount := 0;

fFirstHead := nil;:= nil;:= nil;:= nil;

end;

TPlex.AddToIndex(Value: TMember; Index: integer);current, NewNode: TNodePtr;

if (index > fCount) then;

current := fFirstHead;(NewNode);.Value := Value;

if (index = 1) then.NextFirst := fFirstHead;:= NewNode;(NewNode);;;

2)do:=current.NextFirst;(index);;">while (index > 2) do:= current.NextFirst;(index);;

NewNode.NextFirst := current.NextFirst;.NextFirst := NewNode;

AddToSecondList(NewNode);(NewNode);(NewNode);;

 

end.

1.