Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2010, 16:53   #1
Nitrox
 
Регистрация: 21.03.2010
Сообщений: 9
По умолчанию Работа с Очередью в Delphi

Задание такое:
Создать очередь, информационные поля которой содержат целые числа из текстового файла. Вставить в список новый элемент с информационным полем d после каждого элемента с четным числом в информационном поле

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

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

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
p: PNode;
x: integer;
e: integer;
t: integer;
begin
  New(d);
  x:=StrToInt(Edit1.Text);
  Ind(x);
  with q do begin
    t:=Tail.Info;
    for i:= 1 to 4 do begin
      e:=Head.Info;
      p:=Head.Next;
      if (e mod 2 = 0) then begin
        p^.Next:=d;
        d^.Next:=p^.Next.Next;
        StringGrid1.ColCount:=StringGrid1.ColCount+1;
        Head:=Head.Next;
      end
      else
        Head:=Head.Next;
      end;
  end;
  with StringGrid1 do begin
    for i:= 0 to ColCount - 1 do begin
      with q do begin
        e:=Head.Info;
        Cells[i,0]:=IntToStr(e);
        Head:=Head.Next;
      end;
    end;
  end;
end;
Nitrox вне форума Ответить с цитированием
Старый 30.03.2010, 17:19   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Зайди на мой сайт http://igor-bachin.narod.ru там в разделе "ПОРТФОЛИО" на страничке "Помощь студентам" в секции "Динамические структуры данных" есть несколько программ (в архивах с исходниками), показывающие работу с двусвязными списками (очередями по твоему). Они сделаны в Турбо Паскале, но их можно применить и к твоим нуждам. Все работает. Если помог, можешь оставить отзыв в гостевой...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 30.03.2010, 17:31   #3
Nitrox
 
Регистрация: 21.03.2010
Сообщений: 9
По умолчанию

да мне б объяснить все тонконсти ссылок на следующие элементы и работу с головой и хвостом двусвязного списка
Nitrox вне форума Ответить с цитированием
Старый 30.03.2010, 17:48   #4
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от Nitrox Посмотреть сообщение
да мне б объяснить все тонконсти ссылок на следующие элементы и работу с головой и хвостом двусвязного списка
Ну, тут в двух словах на пальцах тонкости не объяснить...
Тебе нужно сделать структуру данных типа "запись" в которой нужно иметь информационное поле, поля, указывающий на предыдущий и последующий элементы списка, ну, и, возможно, порядковый номер элемента в списке...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 30.03.2010, 17:55   #5
Nitrox
 
Регистрация: 21.03.2010
Сообщений: 9
По умолчанию

Код:
type
  TInfo  = integer; // информационное поле 
  PNode = ^TNode;  // указатель
  TNode  = record
    Info: TInfo;
    Next: PNode;
  end;
  TQueue=record
    Head,        // голова очереди
    Tail: PNode;  // хвост очереди
  end;
  TFile = text;
Nitrox вне форума Ответить с цитированием
Старый 30.03.2010, 18:00   #6
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Вот кусочек кода одной из тех программ, которые я тебе рекомендовал

Код:
Type
   pEl= ^Element;
   Element= record
              strWord:string;
              Next:pEl;
              Prev:pEl
            end;
Var
   trmBgnL1,trmBgnL2,trmBgnL3:pEl;	{терминаторы начала списков}
   trmEndL1,trmEndL2,trmEndL3:pEl;	{терминаторы конца списков}
   ptrTopL1,ptrTopL2,ptrTopL3:pEl;
   ptrTop:pEl;
   fl:text;
   delwrd,idx:integer;
   stwordL1,stwordL2,strwordL3:string;
   deleting:array[1..256] of string[10];
Procedure CreateEl(var trmBgn,trmEnd:pEl; stword:string);
Begin
    New(trmBgn);
    trmBgn^.Next:=NIL;
    trmBgn^.Prev:=NIL;
    trmBgn^.strWord:=stword;
    trmEnd:=trmBgn
End;
Procedure AddEl(var trmEnd:pEl; stword:string);
Var
    prom:pEl;
Begin
    new(prom);
    prom^.strWord:=stword;
    prom^.Next:=nil;
    prom^.Prev:=trmEnd;
    trmEnd^.Next:=prom;
    trmEnd:=prom
End;
Procedure DelEl(var ptrTop:pEl);
Begin
    ptrTop^.Prev^.Next:=ptrTop^.Next;
    ptrTop^.Next^.Prev:=ptrTop^.Prev;
    dispose(ptrTop)
End;
Здесь видна структура элемента списка, процедуры создания, добавления и удаления элемента...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 30.03.2010, 18:10   #7
Nitrox
 
Регистрация: 21.03.2010
Сообщений: 9
По умолчанию

ничо не понятно(
Nitrox вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Работа с БД. Xeon332 Фриланс 12 22.03.2010 22:22
[Delphi] Курсовая работа Semen12345 Фриланс 2 09.01.2010 19:22
Работа с очередью Ongi Общие вопросы C/C++ 1 08.01.2010 19:51