سوال در مورد جستجو در لیست های پیوندی پاسکال

maxxx

New Member
سلام
من میخاستم یک مقداری رو توی لیست های پیوندی جستجو کنم ولی اون شرطی رو که به ازاش باید جستجو کنم تا به
گره آخر برسیم رو نمیدونم
در ضمن اینو نوشتم ولی نشد:
procedure search;
var
h:=nodeptr;
begin
h:=first;
write('enter film name?');
readln(b);
while h<>nil do
if h^.film=b then
begin
writeln('film name=',h^.film);
 

Colonel

New Member
جستجو در دو حالت به پایان میرسه:

1) عنصر مورد نظر پیدا بشه
2) به پایان لیست برسیم

پس شما برای حلقه جستجوتون باید دوتا شرط بزارین.

میتونید داخل حلقه هربار چک کنید که عنصر جاری همون عنصر مورد نظر هست یا نه.اگه بود با Break از حلقه خارج بشین و اگر نبود برید به گره (Node) بعدی.

در حقیقت باید گره های لیست رو یکی یکی پیمایش کنید تا مقدار مورد نظر یافت بشه و یا به انتهای لیست برسید.

انتهای لیست هم وقتی پیدا میشه که گره (Node) جاری به جایی اشاره نکنه. یعنی قسمت اشاره گرش nil باشه.

اون پروسجری هم که نوشتین کاملا اشتباه هست.اصلا از گره اول حرکت نمیکند و به گره های بعدی نمیرسد.
 

1Program

Member
سلام :
شما کافیست شرطت را بدین صورت عوض کنی :
While Node.Link<>nil do ;
این باعث می شود تا روی Node آخر بایستد .
ولی در شرط شما روی link توقف می کرد .
 

Ocarina

Member
کد:
program test;
uses crt;
type
   ptr=^list;
   list=record
      a:integer;
      next:ptr;
   end;
var
   start,p,h1,h2:ptr;
   x:integer;
begin
  clrscr;
  start:=nil;
  write('Enter x= ');
  readln(x);
  while x<>0 DO
    begin
       new(p);
       p^.next:=nil;
       p^.a:=x;

       if start=nil Then
           begin
            start:=p;
           end
        else
            begin
                if start^.a>x then
                    Begin
                       p^.next:=start;
                       start:=p;
                    end
                 else
                     begin
                         h1:=start;
                         h2:=start;
                         while (h2^.a<x) And (h2<> nil ) do
                           Begin
                              h1:=h2;
                              h2:=h2^.next;
                           end;
                           if h2=nil then
                                h1^.next:=p
                            else
                               begin
                                   p^.next:=h2;
                                   h1^.next:=p;
                               end;
                     end;
            end;
       write('Enter x= ');
       readln(x);
    end;
   p:=start;
   while p<> nil do
     begin
        write(p^.a:5);
        p:=p^.next;
     end;
   readln;
  end.
یادش بخیر ترم اول مجبور کردن بنویسیم... بابامون در اومد
 

جدیدترین ارسال ها

بالا