Добавление звена в начало списка

9598
знаков
5
таблиц
6
изображений

1.   Добавление звена в начало списка

Добавление звена в начало списка

 {Процедура добавления звена в начало списка; в x содержится добавляемая информация}

Procedure V_Nachalo(Var First : U; X : BT);

Var Vsp : U;

Begin

New(Vsp);

Vsp^.Inf := X;

Vsp^.Next := First; {То звено, что было заглавным, становится вторым по счёту}

First := Vsp; {Новое звено становится заглавным}

End;

 

2.         Удаление звена из начала списка

Удаление звена из начала списка

 {Процедура удаления звена из начала списка;

в x содержится информация из удалённого звена}

Procedure Iz_Nachala(Var First : U; Var X : BT);

Var Vsp : U;

Begin

Vsp := First; {Забираем ссылку на текущее заглавное звено}

First := First^.Next; {То звено, что было вторым по счёту, становится заглавным}

X := Vsp^.Inf; {Забираем информацию из удаляемого звена}

Dispose(Vsp); {Уничтожаем звено}

End;

 


3.         Добавление звена в произвольное место списка, отличное от начала (после звена, указатель на которое задан)

Добавление звена в произвольное место списка, отличное от начала (после звена, на которое ссылается указатель Pred)

 {Процедура добавления звена в список после звена,

на которое ссылается указатель Pred;

в x содержится информация для добавления}

Procedure V_Spisok(Pred : U; X : BT);

Var Vsp : U;

Begin

New(Vsp); {Создаем пустое звено}

Vsp^.Inf := X; {Заносим информацию}

Vsp^.Next := Pred^.Next; {Теперь это звено ссылается на то,

что было следом за звеном Pred}

Pred^.Next := Vsp; {Теперь новое звено встало вслед за звеном Pred}

End;

 

4. Удаление звена из произвольного места списка, отличного от начала (после звена, указатель на которое задан)

Удаление звена из произвольного места списка, отличного от начала (после звена, на которое ссылается указатель Pred)

 {Процедура удаления звена из списка после звена,

на которое ссылается указатель Pred;

в x содержится информация из удалённого звена}

Procedure Iz_Spiska(Pred : U; Var X : BT);

Var Vsp : U;

Begin

Vsp := Pred^.Next; {Забираем ссылку на удаляемое звено}

{Удаляем звено из списка, перенаправив ссылку на следующее

за ним звено}

Pred^.Next := Pred^.Next^.Next;

X := Vsp^.Inf; {Забираем информацию из удаляемого звена}

Dispose(Vsp); {Уничтожаем звено}

End;


Приведём полный текст модуля.

{Язык Pascal}

Unit Spisok;

 

Interface

Type BT = LongInt;

U = ^Zveno;

Zveno = Record Inf : BT; Next: U End;

Procedure V_Nachalo(Var First : U; X : BT);

Procedure Iz_Nachala(Var First : U; Var X : BT);

Procedure V_Spisok(Pred : U; X : BT);

Procedure Iz_Spiska(Pred : U; Var X : BT);

Procedure Ochistka(Var First: U);

Function Pust(First : U) : Boolean;

Procedure Print(First : U);

Implementation

Procedure V_Nachalo;

Var Vsp : U;

Begin

New(Vsp);

Vsp^.Inf := X;

Vsp^.Next := First;

First := Vsp;

End;

 

Procedure Iz_Nachala;

Var Vsp : U;

Begin

Vsp := First;

First := First^.Next;

X := Vsp^.Inf;

Dispose(Vsp);

End;

 

Procedure V_Spisok;

Var Vsp : U;

Begin

New(Vsp);

Vsp^.Inf := X;

Vsp^.Next := Pred^.Next;

Pred^.Next := Vsp;

End;

 

Procedure Iz_Spiska;

Var Vsp : U;

Begin

Vsp := Pred^.Next;

Pred^.Next := Pred^.Next^.Next;

X := Vsp^.Inf;

Dispose(Vsp);

End;

 

Procedure Ochistka;

Var Vsp : BT;

Begin

While Not Pust(First) Do Iz_Nachala(First, Vsp)

End;

 

Function Pust;

Begin

Pust := First = Nil

End;

 

Procedure Print;

Var Vsp : U;

Begin

Vsp := First;

While Vsp <> Nil Do

Begin

Write(Vsp^.Inf : 6);

Vsp := Vsp^.Next

End; WriteLn

End;

 

Begin

End.

 

// Язык С++

#include < iostream.h >

#include < conio.h >

#include < stdlib.h >

#include < time.h >

typedef long BT;

struct Zveno{

BT Inf;

Zveno *Next; };

 

Zveno *V_Nachalo(Zveno *First, BT X)

{Zveno *Vsp;

Vsp = (Zveno *) malloc(sizeof(Zveno));

Vsp->Inf=X; Vsp->Next=First; First=Vsp;

return First;

}

 

Zveno *Iz_Nachala(Zveno *First)

{Zveno *Vsp;

Vsp=First->Next;

free(First);

return Vsp;

}

 

Zveno *V_Spisok(Zveno *Pred, BT X)

{Zveno *Vsp;

Vsp = (Zveno *) malloc(sizeof(Zveno));

Vsp->Inf=X;

Vsp->Next=Pred->Next;

Pred->Next=Vsp;

return Vsp;

}

 

BT Iz_Spiska(Zveno *Pred)

{BT X;

Zveno *Vsp;

Vsp=Pred->Next;

Pred->Next=Pred->Next->Next;

X=Vsp->Inf;

free(Vsp);

return X;

}

 

void Print(Zveno *First)

{Zveno *Vsp;

Vsp=First;

while (Vsp)

{cout << Vsp->Inf << ' '; Vsp=Vsp->Next;}

cout << "\n";

}

 

int Pust(Zveno *First)

{

return !First;

}

 

Zveno *Ochistka(Zveno *First)

{

while (!Pust(First)) First=Iz_Nachala(First);

return First;

}


Информация о работе «Мультисписки»
Раздел: Информатика, программирование
Количество знаков с пробелами: 9598
Количество таблиц: 5
Количество изображений: 6

0 комментариев


Наверх