скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Линейные списки. Стек. Дек. Очередь

8.   Кормен Т. и другие «Алгоритмы построения и анализ», М.: 2000 г.

9.   Подласый И. П. Учебник для студентов высших педагогических учебных заведений, М.: Просвещение 1996 г.

10.   Усова А. В. «Формирование у школьников понятий в процессе обучения», М.: Педагогика, 1986 г.

Приложение 1. (Листинг программы)

В листинге приведены только три основных модуля. В первом модуле описан интерфейс программы, обработка всех событий. Второй модуль, отвечай за формирование списков и выполнения всех операций со списками. У второго модуля нет формы. Третий модуль – это тест, служит для проверки и оценивания учащихся. В остальных, не приведенных модулях, описаны: формы для добавления элемента в список, лабораторные работы, теоретический материал с примерами, помощь и информация о программе.

unit Unit1; // Интерфейс

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls, Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit8, Unit9, Menus, Unit11, Unit12, Unit13, Unit14, Unit15, Unit16, Unit17;

type

  TForm1 = class(TForm)

    Panel1: TPanel;

    Edit1: TEdit;

    Label1: TLabel;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Panel2: TPanel;

    Label2: TLabel;

    Edit2: TEdit;

    Button5: TButton;

    Button6: TButton;

    Button7: TButton;

    Button8: TButton;

    Panel3: TPanel;

    Label3: TLabel;

    Edit3: TEdit;

    Button9: TButton;

    Button10: TButton;

    Button11: TButton;

    Button12: TButton;

    Panel4: TPanel;

    Label4: TLabel;

    Edit4: TEdit;

    Button13: TButton;

    Button14: TButton;

    Button15: TButton;

    Button16: TButton;

    Panel5: TPanel;

    Label5: TLabel;

    Edit5: TEdit;

    Button17: TButton;

    Button18: TButton;

    Button19: TButton;

    Button20: TButton;

    Panel6: TPanel;

    Edit6: TEdit;

    Label6: TLabel;

    Button21: TButton;

    StatusBar1: TStatusBar;

    Image1: TImage;

    Image2: TImage;

    Image3: TImage;

    Image4: TImage;

    Image5: TImage;

    Button22: TButton;

    Memo1: TMemo;

    Label7: TLabel;

    Image6: TImage;

    Bevel1: TBevel;

    Panel7: TPanel;

    Button23: TButton;

    Button24: TButton;

    Button25: TButton;

    Button26: TButton;

    Edit7: TEdit;

    Image7: TImage;

    Label8: TLabel;

    Panel8: TPanel;

    Image8: TImage;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    N5: TMenuItem;

    Button27: TButton;

    Button28: TButton;

    Button30: TButton;

    Button29: TButton;

    Button31: TButton;

    Button32: TButton;

    N6: TMenuItem;

    N7: TMenuItem;

    N8: TMenuItem;

    N11: TMenuItem;

    N21: TMenuItem;

    N31: TMenuItem;

    N41: TMenuItem;

    N51: TMenuItem;

    N61: TMenuItem;

    N71: TMenuItem;

    Button33: TButton;

    N9: TMenuItem;

    procedure Button12Click(Sender: TObject);

    procedure Button11Click(Sender: TObject);

    procedure Button22Click(Sender: TObject);

    procedure Button21Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure Button4Click(Sender: TObject);

    procedure Button7Click(Sender: TObject);

    procedure Button8Click(Sender: TObject);

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

    procedure Button15Click(Sender: TObject);

    procedure Button16Click(Sender: TObject);

    procedure Button20Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button19Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button6Click(Sender: TObject);

    procedure Button10Click(Sender: TObject);

    procedure Button9Click(Sender: TObject);

    procedure Button14Click(Sender: TObject);

    procedure Button13Click(Sender: TObject);

    procedure Button17Click(Sender: TObject);

    procedure Button18Click(Sender: TObject);

    procedure Button26Click(Sender: TObject);

    procedure Button25Click(Sender: TObject);

    procedure Button23Click(Sender: TObject);

    procedure Button24Click(Sender: TObject);

    procedure N2Click(Sender: TObject);

    procedure N5Click(Sender: TObject);

    procedure N4Click(Sender: TObject);

    procedure Button27Click(Sender: TObject);

    procedure Button30Click(Sender: TObject);

    procedure Button29Click(Sender: TObject);

    procedure Button31Click(Sender: TObject);

    procedure Button32Click(Sender: TObject);

    procedure N8Click(Sender: TObject);

    procedure N11Click(Sender: TObject);

    procedure Button33Click(Sender: TObject);

    procedure N21Click(Sender: TObject);

    procedure N31Click(Sender: TObject);

    procedure N41Click(Sender: TObject);

    procedure N51Click(Sender: TObject);

    procedure N61Click(Sender: TObject);

    procedure N71Click(Sender: TObject);

    procedure N9Click(Sender: TObject);

  private

  public

  end;

procedure DoNewEditList;

procedure DoNewEditListTwo;

procedure DoNewEditRoundList;

var

  Form1: TForm1;

  ListBegin: List;          //указатель на однонапр. список

  ListPos: Integer;         //позиция в однонапр. списке

  ListTwoBegin: ListTwo;    //указатель на двунапр. список

  ListTwoPos: Integer;      //позиция в двунапр. списке

  QueueBegin: List;         //указатель на очередь

  QueuePos: Integer;        //"позиция в очереди" (содержит кол-во символов в Edit до первого элемента)

  Stack: List;              //указатель на стек

  StackPos: Integer;        //"позиция в стеке" (содержит кол-во символов в Edit до первого элемента)

  DeckBegin, DeckEnd: ListTwo;         //указатели на начало и конец дека

  DeckBeginPos, DeckEndPos: Integer;   //"позиции в деке"  (DeckEndPos содержит кол-во символов в Edit от DeckEndPosition до последнего элемента)

  DeckEndPosition: Integer;            //позиция последнего элемента в деке (содержит первоначальное кол-во символов в Edit до последнего элемента)

  RoundList: List;          //указатель в циклическом списке

  RoundListPos: Integer;    //"позиция в циклическом списке"

implementation

uses O_programm, Help, Un18_Lab;

{$R *.DFM}

procedure DoNewEditList;

var

  q: List;

begin

  q := ListBegin;

  Form1.Edit1.Text := '';

  while q <> nil do

    begin

      Form1.Edit1.Text := Form1.Edit1.Text + ' ' + IntToStr(q^.Info);

      q := q^.Next;

    end;

end;

procedure DoNewEditListTwo;

var

  q: ListTwo;

begin

  q := ListTwoBegin;

  Form1.Edit2.Text := '';

  while q <> nil do

    begin

      Form1.Edit2.Text := Form1.Edit2.Text + ' ' + IntToStr(q^.Info);

      q := q^.Next;

    end;

end;

procedure DoNewEditRoundList;

var

  q: List;

begin

  q := RoundList^.Next;

  Form1.Edit7.Text := ' ' + IntToStr(RoundList^.Info);

  while q <> RoundList do

    begin

      Form1.Edit7.Text := Form1.Edit7.Text + ' ' + IntToStr(q^.Info);

      q := q^.Next;

    end;

end;

procedure TForm1.Button12Click(Sender: TObject);

var

  i, j: Integer;

  s: string;

begin

  StatusBar1.Panels[0].Text := '';

  GetQueue(QueueBegin);

  if QueueBegin <> nil then

    begin

      while Edit3.Text[QueuePos] <> ' ' do Inc(QueuePos);

      Inc(QueuePos);

      s := Edit3.Text;

      for i := 1 to QueuePos - 1 do

        if s[i] <> ' ' then s[i] := ' ';

      Edit3.Text := s;

    end

  else

    begin

      ShowMessage('Очередь пуста');

      Edit3.Text := '';

      Image3.Hide;

      Button10.Enabled := False;

      Button11.Enabled := False;

      Button12.Enabled := False;

      StatusBar1.Panels[1].Text := 'Очередь пуста';

    end;

  Image3.Left := Round(QueuePos * 7);

end;

procedure TForm1.Button11Click(Sender: TObject);

begin

  StatusBar1Panels[0].Text := 'Нельзя !!!';

  Memo1.Lines.Add('В очерди нельзя возвращаться в начало т.к. указатель указывает сразу на начало;');

end;

procedure TForm1.Button22Click(Sender: TObject);

begin

  Application.Terminate;

end;

procedure TForm1.Button21Click(Sender: TObject);

var

  q: List;

  qTwo: ListTwo;

  qQueue, rQueue: List;

  Info: Integer;

  FlagList: Boolean;

  qStack: List;

  qDeckBegin, qDeckEnd: ListTwo;

  qRoundList: List; // начало циклич. списка

begin

  Button1.Enabled := True;

  Button2.Enabled := True;

  Button3.Enabled := True;

  Button4.Enabled := True;

  Button5.Enabled := True;

  Button6.Enabled := True;

  Button7.Enabled := True;

  Button8.Enabled := True;

  Button9.Enabled := True;

  Button10.Enabled := True;

  Button11.Enabled := True;

  Button12.Enabled := True;

  Button13.Enabled := True;

  Button14.Enabled := True;

  Button15.Enabled := True;

  Button16.Enabled := True;

  Button17.Enabled := True;

  Button18.Enabled := True;

  Button19.Enabled := True;

  Button20.Enabled := True;

  Button23.Enabled := True;

  Button24.Enabled := True;

  Button25.Enabled := True;

  Button26.Enabled := True;

  Image1.Visible := True;

  Image2.Visible := True;

  Image3.Visible := True;

  Image4.Visible := True;

  Image5.Visible := True;

  Image6.Visible := True;

  Image7.Visible := True;

  Edit1.Text := '';

  Edit2.Text := '';

  Edit3.Text := '';

  Edit4.Text := '';

  Edit5.Text := '';

  Edit7.Text := '';

  StatusBar1.Panels[0].Text := '';

  StatusBar1.Panels[1].Text := '';

  CreateLists;

  q := ListBegin;

  qTwo := ListTwoBegin;

  while q <> nil do

    begin

      Edit1.Text := Edit1.Text + ' ' + IntToStr(q^.Info);

      q := q^.Next;

    end;

  Image1.Left := 9;

  ListPos := 0;

  while qTwo <> nil do

    begin

      Edit2.Text := Edit2.Text + ' ' + IntToStr(qTwo^.Info);

      qTwo := qTwo^.Next;

    end;

  Image2.Left := 9;

  ListTwoPos := 0;

  FlagList := True;

  while QueueBegin <> nil do

    begin

      Info := GetQueue(QueueBegin);

      Edit3.Text := Edit3.Text + ' ' + IntToStr(Info);

      AddToQueue(Info, qQueue);

      if FlagList then

        begin

          FlagList := False;

          rQueue := qQueue;

        end;

    end;

  QueueBegin := rQueue;

  QueuePos := 2;

  Image3.Left := 9;

  while Stack <> nil do

    begin

      Info := GetStack(Stack);

      Edit4.Text := Edit4.Text + ' ' + IntToStr(Info);

      AddToStack(Info, qStack);

    end;

  Stack := qStack;

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

  StackPos := 2;

  Image4.Left := 9;

  while DeckEnd <> nil do

    begin

      Info := GetDeckEnd(DeckEnd);

      Edit5.Text := Edit5.Text + ' ' + IntToStr(Info);

      AddToDeck(Info, qDeckBegin, qDeckEnd, 0);

    end;

  DeckBegin := qDeckBegin;

  DeckEnd := qDeckEnd;

  DeckBeginPos := 2;

  Image5.Left := 9;

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

  DeckEndPosition := 1;

  while Edit5.Text[DeckEndPosition] <> '' do Inc(DeckEndPosition);

  Image6.Left := Round(9 + DeckEndPosition * 6.2);

  Dec(DeckEndPosition);

  DeckEndPos := DeckEndPosition;

  qRoundList := RoundList^.Next;

  Edit7.Text := ' ' + IntToStr(RoundList^.Info);

  while qRoundList <> RoundList do

    begin

      Edit7.Text := Edit7.Text + ' ' + IntToStr(qRoundList^.Info);

      qRoundList := qRoundList^.Next;

    end;

  Image7.Left := 9;

  RoundListPos := 0;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

  Form3.Show;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

  StatusBar1.Panels[0].Text := 'Нельзя !!!';

  Memo1.Lines.Add('В однонаправленном списке нельзя перемещаться назад, т.к. связь существует толко в одну сторону;');

end;

procedure TForm1.Button4Click(Sender: TObject);

var

  qList: List;

  i, j: Integer;

begin

  StatusBar1.Panels[0].Text := '';

  qList := ListBegin;

  i := 0;

  while i <> ListPos do

    begin

      qList := qList^.Next;

      Inc(i);

    end;

  if qList <> nil then

    begin

      if qList^.Next <> nil then Inc(ListPos);

      i := 0;

      j := 0;

      while i < ListPos do

        begin

          Inc(j);

          if Edit1.Text[j] = ' ' then Inc(i);

        end;

      Image1.Left := Round(9 + (j + 1) * 7.5);

    end;

end;

procedure TForm1.Button7Click(Sender: TObject);

var

  qListTwo: ListTwo;

  i, j: Integer;

begin

  StatusBar1.Panels[0].Text := '';

  qListTwo := ListTwoBegin;

  i := 0;

  if ListTwoPos <> 0 then dec(ListTwoPos);

  i := 0;

  j := 0;

  while i < ListTwoPos do

    begin

      Inc(j);

      if Edit2.Text[j] = ' ' then Inc(i);

    end;

  if ListTwoPos = 0 then Image2.Left := 9

  else Image2.Left := Round(9 + (j + 1) * 7.5);

end;

procedure TForm1.Button8Click(Sender: TObject);

var

  qListTwo: ListTwo;

  i, j: Integer;

begin

  StatusBar1.Panels[0].Text := '';

  qListTwo := ListTwoBegin;

  i := 0;

  while i <> ListTwoPos do

    begin

      qListTwo := qListTwo^.Next;

      Inc(i);

    end;

  if qListTwo <> nil then

    begin

      if qListTwo^.Next <> nil then Inc(ListTwoPos);

      i := 0;

      j := 0;

      while i < ListTwoPos do

        begin

          Inc(j);

          if Edit2.Text[j] = ' ' then Inc(i);

        end;

      Image2.Left := Round(9 + (j + 1) * 7.5);

    end;

end;

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

begin

  DestroyList(ListBegin);

  DestroyListTwo(ListTwoBegin);

  DestroyList(QueueBegin);

  DestroyList(Stack);

  DestroyListTwo(DeckBegin);

  Application.Terminate;

end;

procedure TForm1.Button15Click(Sender: TObject);

begin

  StatusBar1.Panels[0].Text := 'Нельзя !!!';

  Memo1.Lines.Add('В стеке нельзя возвращаться в начало т.к. указатель указывает сразу на начало;');

end;

procedure TForm1.Button16Click(Sender: TObject);

var

  i: Integer;

  s: string;

begin

  StatusBar1.Panels[0].Text := '';

  GetStack(Stack);

  if Stack <> nil then

    begin

      while Edit4.Text[StackPos] <> ' ' do Inc(StackPos);

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


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.