МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Линейные списки. Стек. Дек. Очередь

    FlagList: Boolean;

    begin

    FlagList := True; //Для выделения первого элемента

    qQueue := nil;

    rQueue := nil;

    while QueueBegin <> nil do //Ищем указатель на последний элемент очереди

    begin

    Info := GetQueue(QueueBegin);

    AddToQueue(Info, rQueue); //Формируем новую очередь из элементов

    старой

    //очереди, чтобы не потерять ее

    if FlagList then /////////////////////////////////////

    begin // //

    qQueue := rQueue; // формируем указатель на очередь //

    FlagList := False; // //

    end; // //////////////////////////////////

    end;

    AddToQueue(X, rQueue);

    if qQueue <> nil then QueueBegin := qQueue // определяем указатель на

    очередь

    else QueueBegin := rQueue;

    //////////////////////////////////

    end;

    procedure AddToStack(X: Integer; var PointerStack: List); //Добавить

    элемент в

    //стек (PointerStack - указатель на стек)

    var

    Stacks: List;

    begin

    if PointerStack = nil then //Если стек пуст, то формируем его

    begin

    New(PointerStack);

    PointerStack^.Info := X;

    PointerStack^.Next := nil;

    end

    else //иначе добавляем элемент

    begin

    New(Stacks);

    Stacks^.Info := X;

    Stacks^.Next := PointerStack;

    PointerStack := Stacks;

    end;

    end;

    function GetStack(var PointerStack: List): Integer; //ф-ия получает элемент

    из

    // стека и возвращает указатель на стек

    var

    rStack: List;

    begin

    rStack := PointerStack;

    if rStack <> nil then //Если стек еще не пуст

    begin

    PointerStack := PointerStack^.Next;

    Result := rStack^.Info;

    if rStack <> nil then Dispose(rStack);

    end

    else

    begin

    ShowMessage('Стек пуст');

    Form1.Button14.Enabled := False;

    Form1.Image4.Hide;

    end;

    end;

    procedure AddToDeck(X: Integer; var PointerDeckBegin, PointerDeckEnd:

    ListTwo;

    Flag: Integer); //Добавить элемент в дек

    //PointerDeckBegin - указатель на начало дека

    //PointerDeckEnd - указатель на конец дека

    var

    Decks: ListTwo;

    begin

    if PointerDeckBegin = nil then //Если дек пуст, то формируем его

    begin

    New(PointerDeckBegin);

    PointerDeckBegin^.Info := X;

    PointerDeckBegin^.Next := nil;

    PointerDeckBegin^.Prev := nil;

    PointerDeckEnd := PointerDeckBegin;

    end

    else //иначе добавляем элемент

    begin

    if Flag = 0 then //добавляем в начало

    begin

    New(Decks);

    Decks^.Info := X;

    Decks^.Next := PointerDeckBegin;

    Decks^.Prev := nil;

    PointerDeckBegin^.Prev := Decks;

    PointerDeckBegin := Decks;

    end

    else //добавлям в конец

    begin

    New(Decks);

    Decks^.Info := X;

    Decks^.Next := nil;

    Decks^.Prev := PointerDeckEnd;

    PointerDeckEnd^.Next := Decks;

    PointerDeckEnd := Decks;

    end;

    end;

    end;

    function GetDeckBegin(var PointerDeckBegin: ListTwo): Integer;

    //ф-ия получает элемент из начала дека и возвращает указатель на начало

    дека.

    var

    q: ListTwo;

    begin

    if PointerDeckBegin <> nil then //Если дек не пуст

    begin

    Result := PointerDeckBegin^.Info;

    q := PointerDeckBegin;

    PointerDeckBegin := q^.Next;

    if PointerDeckBegin <> nil then PointerDeckBegin^.Prev := nil;

    if q <> nil then Dispose(q);

    end

    else

    begin

    ShowMessage('Дек пуст');

    Form1.Edit5.Text := '';

    Form1.Button18.Enabled := False;

    Form1.Button19.Enabled := False;

    Form1.Button20.Enabled := False;

    Form1.Image5.Hide;

    Form1.Image6.Hide;

    end;

    end;

    function GetDeckEnd(var PointerDeckEnd: ListTwo): Integer;

    //ф-ия получает элемент из конца дека и возвращает указатель на конец

    дека.

    var

    q: ListTwo;

    begin

    if PointerDeckEnd <> nil then //Если дек не пуст

    begin

    Result := PointerDeckEnd^.Info;

    q := PointerDeckEnd;

    PointerDeckEnd := q^.Prev;

    if PointerDeckEnd <> nil then PointerDeckEnd^.Next := nil;

    if q <> nil then Dispose(q);

    end

    else

    begin

    ShowMessage('Дек пуст');

    Form1.Edit5.Text := '';

    Form1.Button18.Enabled := False;

    Form1.Button19.Enabled := False;

    Form1.Button20.Enabled := False;

    Form1.Image5.Hide;

    Form1.Image6.Hide;

    end;

    end;

    procedure CreateLists; //процедура создания всех списков

    var

    i: Integer;

    X: Integer;

    Uk, q: List;

    UkTwo, qTwo: ListTwo;

    UkQueue, qQueue: List;

    qStack: List;

    qDeckBegin, qDeckEnd: ListTwo;

    begin

    X := Random(101); //Определяем значение первого элемента

    Uk := nil; //////////////////////////

    q := nil; // //

    UkTwo := nil; // НАЧАЛЬНЫЕ УСТАНОВКИ: //

    qTwo := nil; // //

    UkQueue := nil; // все указатели = nil //

    qQueue := nil; // //

    qStack := nil; // //

    qDeckBegin := nil; // //

    qDeckEnd := nil; //////////////////////////

    // Destroy for every lists

    if ListBegin <> nil then DestroyList(ListBegin);

    if ListTwoBegin <> nil then DestroyListTwo(ListTwoBegin);

    if QueueBegin <> nil then DestroyList(QueueBegin);

    if Stack <> nil then DestroyList(Stack);

    if DeckBegin <> nil then DestroyListTwo(DeckBegin);

    if RoundList <> nil then DestroyRoundList(RoundList);

    AddToList(X, Uk); //

    AddToListTwo(X, UkTwo); // Добавляем Х в

    AddToQueue(X, UkQueue); // каждый список

    AddToStack(X, qStack); //

    AddToDeck(X, qDeckBegin, qDeckEnd, 0); //

    AddToRoundList(X, RoundList); ///////////////////

    Unit1.Form1.Edit6.Text := IntToStr(X);

    q := Uk; //

    [pic]qTwo := UkTwo; // Формируем указатели на начало списков

    qQueue := UkQueue; //

    for i := to 9 do //Дальнейшее формирование списков

    begin

    X := Random(101);

    AddToList(X, q);

    AddToListTwo(X, qTwo);

    AddToQueue(X, qQueue);

    AddToStack(X, qStack);

    AddToDeck(X, qDeckBegin, qDeckEnd, 0);

    AddToRoundList(X, RoundList);

    Unit1.Form1.Edit6.Text := Unit1.Form1.Edit6.Text + ' ' + IntToStr(X);

    end;

    ListBegin := Uk; //////////////////////////////////////

    ListTwoBegin := UkTwo; // //

    QueueBegin := UkQueue; // //

    Stack := qStack; // Определяем указатели все списки //

    DeckBegin := qDeckBegin; // //

    DeckEnd := qDeckEnd; // //

    RoundList := RoundList^.Next //////////////////////////////////

    end;

    end.

    unit Unit16; //Тест

    interface

    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ExtCtrls;

    type

    TForm16 = class(TForm)

    Memo1: TMemo;

    Panel1: TPanel;

    Button1: TButton;

    RadioGroup1: TRadioGroup;

    Button2: TButton;

    procedure RadioGroup1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    var

    Form16: TForm16;

    NumberQuestion: Integer = 0;

    NumberTrueAnswer: Integer = 0;

    ff: Boolean = True;

    implementation

    uses Unit1, Un18_Lab;

    {$R *.DFM}

    procedure TForm16.RadioGroup1Click(Sender: TObject);

    begin

    Button1.Enabled := True;

    Button1.SetFocus;

    end;

    procedure TForm16.Button2Click(Sender: TObject);

    begin

    Form16.Hide;

    Form1.Show;

    end;

    procedure TForm16.Button1Click(Sender: TObject);

    begin

    Memo1.Lines.Clear;

    Button1.Enabled := False;

    Inc(NumberQuestion);

    case NumberQuestion of

    1:

    begin

    if RadioGroup1.ItemIndex = 0 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Однонаправленный список - это ...');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('Список, элементы которого имеют связь со

    следующим и предыдущим элементом');

    RadioGroup1.Items.Add('Список, элементы которого имеют связь со

    следующим элементом');

    RadioGroup1.Items.Add('Список, элементы которого не имеют связи');

    end;

    2:

    begin

    if RadioGroup1.ItemIndex = 1 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Если элемент содержит ссылки на следующий и

    предыдущий элемент, то это ...');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('однонаправленный список');

    RadioGroup1.Items.Add('двунаправленный список');

    RadioGroup1.Items.Add('очередь');

    RadioGroup1.Items.Add('стек');

    RadioGroup1.Items.Add('дек');

    RadioGroup1.Items.Add('циклический список');

    end;

    3:

    begin

    if RadioGroup1.ItemIndex = 1 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Куда добавляется элемент в двунаправленный

    список?');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('В начало');

    RadioGroup1.Items.Add('В конец');

    RadioGroup1.Items.Add('В любое другое место');

    end;

    4:

    begin

    if RadioGroup1.ItemIndex = 2 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Чем отличается однонаправленный список от

    двунаправленного?');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('Существует связь с предыдущим элементом');

    RadioGroup1.Items.Add('Не существует связь с предыдущим

    элементом');

    RadioGroup1.Items.Add('Не отличаются');

    end;

    5:

    begin

    if RadioGroup1.ItemIndex = 1 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Какой элемент считывается из стека?');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('Последний');

    RadioGroup1.Items.Add('Любой');

    RadioGroup1.Items.Add('Первый');

    end;

    6:

    begin

    if RadioGroup1.ItemIndex = 0 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Чем отличается дек от стека?');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('Добавление в любом место. Удаление из

    начала');

    RadioGroup1.Items.Add('Добавление в начало. Удаление из любого

    места');

    RadioGroup1.Items.Add('Все включения исключения происходят на обоих

    его концах');

    end;

    7:

    begin

    if RadioGroup1.ItemIndex = 2 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Откуда считывается элемент из очереди?');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('С конца');

    RadioGroup1.Items.Add('С начала');

    RadioGroup1.Items.Add('Из люього места');

    end;

    8:

    begin

    if RadioGroup1.ItemIndex = 1 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Куда добавляется элемент в стек?');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('В конец');

    RadioGroup1.Items.Add('В начало');

    RadioGroup1.Items.Add('В любое место');

    end;

    9:

    begin

    if RadioGroup1.ItemIndex = 0 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Какую ссылку содержит последний элемент

    циклического списка?');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('На первый элемент');

    RadioGroup1.Items.Add('На предыдущий элемент');

    RadioGroup1.Items.Add('NIL');

    end;

    10:

    begin

    if RadioGroup1.ItemIndex = 0 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Если все включения и исключения происходят на

    одном конце списка, то это ...');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('однонаправленный список');

    RadioGroup1.Items.Add('двунаправленный список');

    RadioGroup1.Items.Add('очередь');

    RadioGroup1.Items.Add('стек');

    RadioGroup1.Items.Add('дек');

    RadioGroup1.Items.Add('циклический список');

    end;

    11:

    begin

    if RadioGroup1.ItemIndex = 3 then Inc(NumberTrueAnswer);

    Memo1.Lines.Add('Если последний элемент имеет ссылку на первый

    элемент, то это ...');

    RadioGroup1.Items.Clear;

    RadioGroup1.Items.Add('однонаправленный список');

    RadioGroup1.Items.Add('двунаправленный список');

    RadioGroup1.Items.Add('очередь');

    RadioGroup1.Items.Add('стек');

    RadioGroup1.Items.Add('дек');

    RadioGroup1.Items.Add('циклический список');

    end;

    12:

    begin

    if RadioGroup1.ItemIndex = 5 then Inc(NumberTrueAnswer);

    Button1.Hide;

    if NumberTrueAnswer >= 10 then ShowMessage('Ваша оценка -

    ОТЛИЧНО!');

    if (NumberTrueAnswer >= 8) and (NumberTrueAnswer < 10) then

    ShowMessage('Ваша оценка - ХОРОШО!');

    if (NumberTrueAnswer >= 6) and (NumberTrueAnswer < 8) then

    ShowMessage('Ваша оценка - ТРИ!');

    if NumberTrueAnswer < 6 then

    begin

    ShowMessage('Тебе однозначно нужно почитать теорию. Твоя оценка

    - Два!!!');

    ff := False;

    end;

    Form16.Hide;

    Form1.Show;

    if not ff then Form18.Show;

    end;

    end;

    end;

    procedure TForm16.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    Form16.Hide;

    Form1.Show;

    if not ff then Form18.Show;

    end;

    end.

    -----------------------

    4

    2

    1

    3

    5

    Включить

    Исключить

    Конец

    Третий

    Второй

    1

    3

    5

    4

    2

    2

    1

    3

    5

    N

    4

    Включить или исключить

    Новый

    4

    3

    2

    1

    Третий сверху

    Новый

    Конец

    Третий

    Второй

    Начало

    Низ

    Верх

    Включить или исключить

    Второй сверху

    Рис. 1 Стек, представленный в виде железнодорожного разъезда

    Включить или исключить

    Правый конец

    Второй справа

    Второй слева

    Левый конец

    N

    N

    4

    3

    2

    1

    Р

    *

    Р

    Указываемый объект

    *

    Содержимое

    Адрес

    Связанное распределение

    Содержимое

    Адрес

    Последовательное распределение

    B:

    C:

    D:

    E:

    Л:

    B

    C

    D

    E

    Л

    Элемент 1

    Элемент 2

    Элемент 3

    Элемент 4

    Элемент 5

    L0 + c:

    L0 + 2c:

    L0 + 3c:

    L0 + 4c:

    L0 + 5c:

    Элемент 1

    Элемент 2

    Элемент 3

    Элемент 4

    Элемент 5

    FIRST

    Элемент 5

    Элемент 4

    Элемент 3

    Элемент 2

    Элемент 1

    Элемент [pic]

    FIRST

    Элемент 5

    Элемент 4

    Элемент 3

    Элемент 2

    Элемент 1

    LINK

    INFO

    PTR

    Голова списка

    а

    а

    а

    а

    nil

    3

    1

    2

    4

    5

    Начало

    ???????????????????????????????????????????????????????????????????????

    ????????????????????????????????????????????????????????????????????????????

    ?????????????????????

    Страницы: 1, 2, 3, 4, 5, 6, 7


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.