PDA

View Full Version : قطعه برنامه ای برای لیست پیوندی Linked List



bijibuji
یک شنبه 11 مرداد 1388, 08:30 صبح
با سلام
لیست پیوندی زیر رو داریم:

http://barnamenevis.org/forum/attachment.php?attachmentid=34409&stc=1&d=1249187010

می خوایم تست کنیم ببینیم روال یازگشتی زیر چه خروجی رو روی صفحه چاپ می کنه:


Procedure WHAT(L)
Begin
If L <> 0 then begin
WHAT (Link(L));
Print(Data(L));
WHAT (Link(L));
Print (Data(L));
End;
End;برای این منظور، من برنامه زیر رو در محیط پاسکال نوشتم:


uses crt;
type
pointer=^node;
node=record
data:char;
link:pointer;
end;
var
head,temp1,temp2:pointer;
newparameter:char;
procedure WHAT(L:pointer);
begin
if L<>nil then
begin
WHAT(L^.link);
write(L^.data);
WHAT(L^.link);
write(L^.data);
end;
end;
begin
clrscr;
writeln;
writeln;
writeln;
writeln;
writeln;
writeln('Enter Parameters...');
readln(newparameter);
new(head);
head^.data:=newparameter;
head^.link:=nil;
while newparameter<>chr(13) do
begin
new(temp1);
temp2:=head;
while temp2^.link<>nil do
temp2:=temp2^.link;
temp2^.link:=temp1;
temp1^.data:=newparameter;
temp1^.link:=nil;
readln(newparameter);
end;
writeln;
writeln;
writeln;
write(' ');
temp2:=head;
while temp2^.link <> nil do
begin
write(temp2^.data,' ----> ');
temp2:=temp2^.link;
end;
write('nil');
readln;
writeln;
writeln;
writeln;
writeln;
write(' ');
WHAT(head);
readln;
end.

اما در خروجی به مشکل بر می خوره. کسی نمیدونه مشکل از کجاست؟

tdkhakpur
یک شنبه 11 مرداد 1388, 14:47 عصر
سلام
یه مقدار اضافه کاری کردید.


uses crt;
type
pointer=^node;
node=record
data:char;
link:pointer;
end;
var
head,temp1,temp2:pointer;
newparameter:char;
procedure WHAT(L:pointer);
begin
if L<>nil then
begin
WHAT(L^.link);
write(L^.data);
// WHAT(L^.link); اضافه ها
// write(L^.data);
end;
end;
begin
clrscr;
writeln;
writeln;
writeln;
writeln;
writeln;
writeln('Enter Parameters...');
readln(newparameter);
new(head);
head^.data:=newparameter;
head^.link:=nil;
temp2:=head;
while newparameter<>chr(13) do
begin
readln(newparameter); // انتقال
new(temp1);
// while temp2^.link<>nil do اضافه
// temp2:=temp2^.link; اضافه
temp2^.link:=temp1;
temp1^.data:=newparameter;
temp1^.link:=nil;
temp2:= temp1;
end;
writeln;
writeln;
writeln;
write(' ');
temp2:=head;
while temp2^.link <> nil do
begin
write(temp2^.data,' ----> ');
temp2:=temp2^.link;
end;
write('nil');
readln;
writeln;
writeln;
writeln;
writeln;
write(' ');
WHAT(head);
readln;
end.

bijibuji
شنبه 24 مرداد 1388, 00:26 صبح
بخش اولی که گفته بودید اضافه نیست، کاملا لازم و جزء صورت مساله است. اضافه نیست. دو جمله باید به ضرورت مساله دوبار تکرار بشن.

اما در مورد دوم که داخل بدنه خود برنامه است اکر دلیلش رو بگین ممنون می شم.

tdkhakpur
شنبه 24 مرداد 1388, 13:42 عصر
بخش اولی که گفته بودید اضافه نیست، کاملا لازم و جزء صورت مساله است. اضافه نیست. دو جمله باید به ضرورت مساله دوبار تکرار بشن.

اما در مورد دوم که داخل بدنه خود برنامه است اکر دلیلش رو بگین ممنون می شم.
چرا ! اون بخش اول اضافه هست ولی برای اینکه کار شما مبهم نشه همانطور که میخواهید ادامه بدید ولی در اخر کار یه تستی با پیشنهادی که من کردم انجام بدید خواهید فهمید که اضافه هست.
ولی در مورد دوم.


temp2:=head;
while newparameter<>chr(13) do
begin
readln(newparameter); // انتقال
new(temp1);
// while temp2^.link<>nil do اضافه
// temp2:=temp2^.link; اضافه
temp2^.link:=temp1;
temp1^.data:=newparameter;
temp1^.link:=nil;
temp2:= temp1;
end;

خوب در اینجا منظور پیمایش کل لیست هست و ما قبل از ترک node قبلی آدرس این node را در temp2 ذخیره میکنیم وtemp1 فقط به لینک جدید اشاره میکند.