Хелпикс

Главная

Контакты

Случайная статья





Сортировка включением.. Указатели.



8.1.2. Сортировка включением.

 

DP1

PROGRAM InsertionSort (INPUT, OUTPUT);

{Сортирует символы из INPUT}

CONST

Max = 16;

ListEnd = 0;

TYPE

RecArray = ARRAY [1 .. Max] OF

          RECORD

            Key: CHAR;

            Next: 0 .. Max;

          END;

VAR

Arr: RecArray;

First, Index: 0 .. Max;

Prev, Curr: 0 .. Max; 

Extra: CHAR;

Found: BOOLEAN;

BEGIN {InsertionSort}

First := 0;

Index := 0;

WHILE NOT EOLN     

DO

BEGIN

{Помещать запись в список, если позволяет пространство,

иначе игнорировать и сообщать об ошибке}

Index := Index + 1;

IF Index > Max

THEN

   BEGIN

     READ(Extra);

     WRITELN('Сообщение содержит: ', Extra, '. Игнорируем.');

   END

ELSE

   BEGIN

     READ(Arr[Index].Key);

     {Включение Arr[Index] в связанный список}

   END

END; {WHILE}

{Печать списка начиная с Arr[First]}

END. {InsertionSort}

 

DP 1.1.

{Вставляем запись в связанный список}

Prev := 0;

Curr := First;

{Найти значения Prev и Curr, если существуют такие что

Arr[Prev].Key <= Arr[Index].Key <= Arr[Curr].Key}

 

Arr[Index].Next = Curr;

IF Prev = 0 {Первый элемент в списке}

THEN

First := Index;

ELSE

Arr[Prev].Next := Index;

 

 

DP 1.1.1

{Найти значения Prev и Curr, если существуют такие что

Arr[Prev].Key <= Arr[Index].Key <= Arr[Curr].Key}

 

Found := FALSE:

WHILE (Curr <> 0) AND NOT Found

DO

IF Arr[Index]. Key > Arr[Curr].Key

THEN

BEGIN

Prev := Curr;

Curr := Arr[Curr].Next

END

ELSE

Found := True;

 

DP 1.2

{Печать списка начиная с Arr[First]}

Index := First;

WHILE Index <> ListEnd

DO

BEGIN

WRITE(Arr[Index].Key); 

Index := Arr[Index].Next

END;

WRITELN;

 

 


20.2. Указатели.

 

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

 

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

 

TYPE

RefInt = ^INTEGER;

VAR

PInt1, PInt2: RefInt;

 

Операции = и <> применимы к указателям и позволяют узнать эквивалентны ли значения двух переменных типа указатель.

 

Для обозначения указателей не связанный с какой-либо переменной, «пустых», используется константа NIL – пустой указатель.

 

Переменной типа указатель может быть присвоено значение другой переменной или значение константы NIL.

         

PInt1 := PInt2;        
PInt1 := NIL;

 

Выделение памяти.

 

NEW(PInt1);  
PInt1^ := 1;
New(PInt2);
PInt2^ := PInt1^;

 

Освобождение памяти.

  DISPOSE(PInt1);

 

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

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.