Главная » Статьи » Рефераты » Без категории

Динамические структуры данных: очереди


Очередь разумнее всего моделировать, отобразив её на двунаправленный кольцевой список. В этом случае в заглавном звене будет присутствовать информация как об указателе на голову, так и на хвост очереди.

Выделим типовые операции над очередями:

проверка, пуста ли очередь;

очистка очереди.

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

{Язык Pascal}

Unit Spisok2;

Interface

Type BT = LongInt;

U = ^Zveno;

Zveno = Record Inf : BT; N, P: U End;

Implementation

Procedure V_Och;

Begin

Vsp^.Inf := X;

End;

Procedure Iz_Och;

Begin

x:=first^.inf;

then begin

first:= nil

end

begin

Vsp := First;

First := First^.N;

First^.P := Vsp^.P;

Dispose(Vsp)

end

End;

Procedure Ochistka;

Begin

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

End;

Begin

Pust := First = Nil

End;

Begin

End.

#include <conio.h>

#include <stdlib.h>

#include <time.h>

typedef long BT;

BT Inf;

U *N, *P;

U *V_Och(U *First, BT X)

{ U *Vsp;

Vsp->Inf=X;

U *Iz_Och(U *First, BT &X)

{ U *Vsp;

X=First->Inf;

int Pust(U *First)

U *Ochistka(U *First)

{ BT Vsp;

}

Пример. Напечатать в порядке возрастания первые n натуральных чисел, в разложение которых на простые множители входят только числа 2, 3, 5.

Алгоритм решения. Введем три очереди x2, x3, x5, в которых будем хранить элементы, которые соответственно в 2, 3, 5 раз больше напечатанных, но еще не напечатаны. Рассмотрим наименьший из ненапечатанных элементов; пусть это x. Тогда он делится нацело на одно из чисел 2, 3, 5. x находится в одной из очередей и, следовательно, является в ней первым (меньшие напечатаны, а элементы очередей не напечатаны). Напечатав x, нужно его изъять и добавить его кратные. Длины очередей не превосходят числа напечатанных элементов.

{Язык Pascal}

Program Example;

Uses Spisok2;

Begin

End;

Begin

Min := Vsp

End;

Begin

X2 := Nil; X3 := Nil; X5 := Nil;

For I := 1 To N Do

Begin

End;

WriteLn

End.

#include "spis2.cpp"

U * X2, *X3, *X5;

{ BT X; long I, N;

X2 = NULL; X3 = NULL; X5 = NULL;

cout << "Сколько чисел напечатать? "; cin >> N;

for (I=1;I<=N; I++)

}

}

void PrintAndAdd(BT T)

}

BT Min (BT A, BT B, BT C)

{ BT vsp;

}

Категория: Без категории | Добавил: kol56do (07.09.2014)
Просмотров: 309 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar