Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Очереди в Паскале (https://forum.antichat.xyz/showthread.php?t=166552)

Andres 27.12.2009 23:11

Очереди в Паскале
 
И еще одна...

Очередь задана структурой
type Person=......
Key:.....//ключ
Next:.....//адреса следующего элемента
............
var First, Pn: Person;
Очередь существует, количество элементов >=2.
Конечный элемент очереди имеет P^.next=nil,адреса(хвоста) входу очереди - First. Навести фрагмент программы, с помощью которого из очереди будет вытянуто дежурный элемент(последний при организации) и его адрес будет присвоен переменной Pn, выполнить необходимую переадресацию после исключения элемента.
Использовать исключительно описаны переменные.

Retro 28.12.2009 04:42

Создаешь запись type Person = record .где внутри есть указатель на следующий элемент этого-же типа( объявленный выше). Перед этим создаешь тип - указатель на эту запись(он как раз и описан внутри записи).

Код:

type
      Pperson = ^Person; // создаем указатель на тип Person;
              Person= record
              Key: integer      //ключ?
              Next: Pperson  //адреса следующего элемента
      end; // закрываем запись.

var
      Temp, First, Pn: PPerson;
      N,i:byte;
Begin
      First := Nil;
      writeln('N?');
      readln(N);
      for i :=1 to N do
      begin
              Getmem(Temp, Sizeof(Person)); //выделили память.
              If First = nil then  First:=Temp
              else
                    Pn^.next :=Temp;
              Pn :=Temp;
     
      end;
temp^.next=Nill; //последний элемент конечный
End.


Как-то так, писал впопыпах и ночью. Это мы создали очередь, удаление из конца доделай сам.

n1ghtstalker 28.12.2009 09:18

Цитата:

Сообщение от Retro
Создаешь запись type Person = record .где внутри есть указатель на следующий элемент этого-же типа( объявленный выше). Перед этим создаешь тип - указатель на эту запись(он как раз и описан внутри записи).

Код:

type
      Pperson = ^Person; // создаем указатель на тип Person;
              Person= record
              Key: integer      //ключ?
              Next: Pperson  //адреса следующего элемента
      end; // закрываем запись.

var
      Temp, First, Second, Pn: PPerson;
      N,i:byte;
Begin
      First := Nil;
      writeln('N?');
      readln(N);
      for i :=1 to N do
      begin
              Getmem(Temp, Sizeof(Person)); //выделили память.
              If First = nil then  First:=Temp
              else
                    second^.next :=temp;
              Second :=temp;
     
      end;
temp^.next=Nill;
End.

Как-то так, писал впопыпах и ночью.

по моему ещё ячейки памяти не выделенны под first,second,temp.


Время: 01:20