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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2008, 22:41   #1
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию Помогите пожалуйста со списками...

Двусвязный список. Узел списка — информация о студенте: фамилия, год рождения, год поступления, оценки по предметам. Студентов, поступивших в нечетном году, занести в другой список (с удалением из первого). Распечатать оба списка.
Все операции по перемещению узлов внутри списка или между списками обязательно должны производиться с помощью переназначения указателей на узлы.

Помогите пожалуйста, никак не могу разобраться с этими списками((
Horknee вне форума Ответить с цитированием
Старый 20.12.2008, 04:54   #2
lexus_ilia
Студентик :)
Пользователь
 
Аватар для lexus_ilia
 
Регистрация: 29.09.2008
Сообщений: 84
По умолчанию

А что именно не получается?Если всё, то я сожелею, а если что-то, то ваш код встудию посмотрим, подскажем...
lexus_ilia вне форума Ответить с цитированием
Старый 20.12.2008, 16:48   #3
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию

Да вроде как получается...но я не понимаю самого смысла двухсвязных списков, знаю, что в нем адрес есть как на следующий элемент, так и на предыдущий...а что дальше...хм(
Horknee вне форума Ответить с цитированием
Старый 20.12.2008, 19:19   #4
lexus_ilia
Студентик :)
Пользователь
 
Аватар для lexus_ilia
 
Регистрация: 29.09.2008
Сообщений: 84
По умолчанию

Ну как что дальше, если у нас есть такая структура, то мы можем её использовать по назначению, значится у нас имеется элемент списка, который мы описали как запись (record), в этой записи у нас как минимум 2-е переменные которые являются нашими указателями на предыдущий и последующий элемент списка и имеется наша текстовая,числовая информация и всё.
lexus_ilia вне форума Ответить с цитированием
Старый 20.12.2008, 22:07   #5
MalexG
Форумчанин
 
Регистрация: 06.11.2008
Сообщений: 100
По умолчанию

Почитайте, может быть поможет.
Вложения
Тип файла: zip Динамическое распределение памяти.zip (50.9 Кб, 11 просмотров)
MalexG вне форума Ответить с цитированием
Старый 21.12.2008, 00:09   #6
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию

ммм...а сложно будет исправить односвязный список на двусвязный?
Horknee вне форума Ответить с цитированием
Старый 21.12.2008, 17:21   #7
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию

Код:
Program spisok;
 uses crt;
 type stroka= String[10];
      mas= array[1..20] of integer;
      mass= array[1..20] of stroka;
  PComp= ^Comp;
  Comp= record
      init:stroka;
      yearBIR ,yearREC: integer;
      pNext:PComp
      end;
 Var
 pBegin, pEnd, prab, pKey, pred, pTop, pPosl: PComp;
 sn: Stroka;
 st, sd: integer;
 bCond: Boolean;
 i,n:integer;
 f: text;
 y, z: mas;
 x: mass;

 Procedure CreateLL(var pBegin, pEnd: PComp; var sn: Stroka; sd, st: integer);
 begin
   New(pBegin);
   pBegin^.pNext:=Nil;
   pBegin^.init:=sn;
   pBegin^.yearBIR:=sd;
   pBegin^.yearREC:=st;
   pEnd:=pBegin
 end;

 Procedure AddLL(var pEnd: PComp; sn:  Stroka; sd ,st: integer);
  var prab: PComp;
  begin
   New(prab);
   prab^.pNext:=Nil;
   pEnd^.pNext:=prab;
   pEnd:=prab;
   pEnd^.init:=sn;
   pEnd^.yearBIR:=sd;
   pEnd^.yearREC:=st;
  end;

 Procedure Find( pBegin:pComp; var pKey, pred:PComp; var bCond:Boolean);
 begin
   pKey:=pBegin;
   while (pKey<>NIL) and (pKey^.yearREC mod 2 = 0) do
   begin
     pred:=pKey;
     pKey:=pKey^.pNext
   end;
 If (pKey=NIL) then bCond:=FALSE
   else bCond:=TRUE;
 end;

  Procedure DelComp( var pBegin: PComp);
   Var pKey, pred: pcomp;

  begin
    pkey:=NIL;
    pred:= NIL;
     if (pBegin^.yearREC mod 2 <> 0) then
    begin
        pkey:= pbegin;
        pbegin:= pbegin^.pNext;
        Dispose(pKey);
    end
    else begin
    Find(pBegin,pKey,pred,bCond);
    If bcond then begin
    pred^.pnext:=pKey^.pNext;
    dispose(pkey);
    end;

        end;

   end;

 begin
  ClrScr;
  pTop:=NIL;
  pPosl:=NIL;

  assign(f, 'data.txt');
  reset(f);
  readln(f, n);
  while not eof(f) do
  begin
   for i:=1 to n do
    begin
      readln(f, sn, sd, st);
      x[i]:= sn;
      y[i]:= sd;
      z[i]:= st;
    end;
  end;

  CreateLL(pBegin, pEnd, x[1], y[1], z[1]);

  for i:=2 to n do
  begin
    AddLL(pEnd,x[i], y[i], z[i]);
  end;


  writeln('‚лў®¤ Ёб室*®Ј® бЇЁбЄ*');
  prab:=pBegin;
  While (prab<>Nil) do
  begin
    writeln(prab^.init);
    writeln(prab^.yearBIR);
    writeln(prab^.yearREC);
    prab:=prab^.pNext;
  end;
  pkey:=pbegin;
  While (pKey<>NIL) do
  begin
      Find( pBegin, pKey, pred, bCond);
      if bcond=true then begin
      If pTop=NIL then CreateLL(pTop,pPosl,pKey^.init,pKey^.yearBIR, pKey^.yearREC)
        else AddLL(pPosl,pKey^.init,pKey^.yearBIR, pKey^.yearREC);
        delComp( pBegin);    end;
   end;


  Writeln('€§¬Ґ*Ґ**л© бЇЁб®Є');
  prab:=pTop;
  while prab<>NIL do
   begin
      writeln(prab^.init);
      writeln(prab^.yearBIR);
      writeln(prab^.yearREC);
      prab:=prab^.pNext;
   end;


   While prab<>NIL do
   begin
    prab:=pbegin;
    pbegin:=Pbegin^.pNext;
    dispose(prab);
   end;
   readln;
  end.
Вот эта задача, только с односвязным списком...помогите пожалуйста переделать в двусвязный...очень прошу...
Horknee вне форума Ответить с цитированием
Старый 22.12.2008, 10:09   #8
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
uses crt;
type
  Link = ^ Node;
   node = record
    s:string[15];
    b,g:integer;
    mark:array [1..5] of byte;
    next,before:Link;
    end;
    
    

var head,head1,sp,sp1,k:link;
    f:text;
    s:string[15];
    b,g,i:integer;
    mark:array[1..5] of byte;
    
    
    
procedure Insert(var x,newnode:link);
var cur:link;
    i:integer;
begin
  cur:=x;
  while cur^.next<>x do
    cur:=cur^.next;
  newnode^.next:=cur^.next;
  newnode^.before:=cur;
  cur^.next^.before:=newnode;
  cur^.next:=newnode;
  newnode^.s:=s;
  newnode^.b:=b;
  newnode^.g:=g;
  for i:=1 to 5 do
  newnode^.mark[i]:=mark[i];
end;

procedure Del(var x:link);
begin
 x^.next^.before:=x^.before;
 x^.before^.next:=x^.next;
end;


procedure View(var x:link);
var cur,newnode:link;
begin
  cur:=x^.next;
  while cur<>x do
   begin
    if  cur^.g mod 2=1 then begin
                             s:=cur^.s;
                             b:=cur^.b;
                             g:=cur^.g;
                             mark:=cur^.mark;
                             Del(cur);
                             New(newnode);
                             Insert(head1,newnode);
                            end;
    cur:=cur^.next;
   end;
end;

procedure Print(var x:link);
var cur:link;
begin
  cur:=x^.next;
  while cur<>x do
   begin
    writeln(cur^.s);
    cur:=cur^.next;
   end;
end;



begin
clrscr;
New(head);
head^.next:=head;
head^.before:=head;
Head^.s:='Начало';
New(head1);
head1^.next:=head1;
head1^.before:=head1;
Head1^.s:='Начало';
assign(f,'c:\1.txt');
Reset(f);
while not(eof(f)) do
 begin
  readln(f,s);
  readln(f,b);
  readln(f,g);
  for i:=1 to 5 do
   readln(f,mark[i]);
  New(k);
  Insert(head,k);
 end;
 close(f);
 View(head);
 Writeln('Chet');
 Print(head);
 writeln('Nechet');
 Print(head1);
end.
Нормальное состояние техники - нерабочее, все остальное частный случай.

Последний раз редактировалось alex_fcsm; 23.01.2009 в 12:33.
alex_fcsm вне форума Ответить с цитированием
Старый 22.12.2008, 16:10   #9
Horknee
Пользователь
 
Регистрация: 21.09.2008
Сообщений: 70
По умолчанию

alex_fcsm, огромное спасибо! Немного подправлю, чтобы все данные выводило на экран и будет гуд)))
Horknee вне форума Ответить с цитированием
Старый 22.12.2008, 16:18   #10
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Вроде там выводилось 2 списка:поступившие в четном году и поступившие в нечетном году
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просьба помочь новичку со списками. cbst Общие вопросы C/C++ 4 13.06.2008 19:32
Работа со списками Dimo444ka Помощь студентам 2 01.06.2008 16:34
С++ - задача со списками Галечка Помощь студентам 4 08.11.2007 23:05
Работа со списками. radist Паскаль, Turbo Pascal, PascalABC.NET 4 07.05.2007 00:05