View Full Version : giúp với
bài thuộc danh sách liên kết này sai ở đâu vậy?yêu cầu là viết chương trình con nhập và xuất số nguyên.Danh sách liên kết này mình không hiểu lắm bạn co thể chỉ mình những chổ trọng tâm,cần chú ý và kinh nghiệm của bạn không .
CÁM ƠN.
type pt=^ds;
ds=record
sn:integer;
link:pt;
end;
var head:pt;x:ds;
i,n:integer;
procedure nhap(var head:pt;x:ds);
var p:pt;
begin
new(p);
while p<>nil do
begin
p^.sn:=x.sn;
p:=p^.link;
end;
end.
begin
write('nhap vao so phan tu:');readln(n);
head:=nil;
for i:=1 to n do
with x do
begin
write('nhap so nguyen:');readln(sn);
nhap(head;x);
write(x.sn,' ');
end;
readln;
end.
Huynh Phong
29-06-2004, 09:14
cho Head := p; Ok!..................
bài thuộc danh sách liên kết này sai ở đâu vậy?yêu cầu là viết chương trình con nhập và xuất số nguyên.Danh sách liên kết này mình không hiểu lắm bạn co thể chỉ mình những chổ trọng tâm,cần chú ý và kinh nghiệm của bạn không .
CÁM ƠN.
type pt=^ds;
ds=record
sn:integer;
link:pt;
end;
var head:pt;x:ds;
i,n:integer;
procedure nhap(var head:pt;x:ds);
var p:pt;
begin
new(p);
while p<>nil do
begin
p^.sn:=x.sn;
p:=p^.link;
end;
end.
begin
write('nhap vao so phan tu:');readln(n);
head:=nil;
for i:=1 to n do
with x do
begin
write('nhap so nguyen:');readln(sn);
nhap(head;x);
write(x.sn,' ');
end;
readln;
end.
sao lại cần head:=p;
Huynh Phong
04-07-2004, 09:24
{ ====Chương trình này cũng có chức năng tương tự, bạn hãy chạy xem ===}
Uses CRT;
Type
Integers =Integer;
Pt = ^Ds;
Ds = Record
sn: integers;
Link:Pt;
end; { end record }
Var
Head, Linker1, Linker2: Pt;
IoHead : Boolean;
x,y : Byte;
Ch : Char;
{ ===================== }
Function MemHeap: Boolean; { thử xem Heap còn đủ cho thủ tục New(Head) hay không }
begin
if MemAvail>=SizeOf(Head)+SizeOf(Integers) then MemHeap := True else
MemHeap := False;
end;
{ ==================== }
Procedure NhapSoNguyen(var IoMem:Boolean); Var I: Integers;
begin
Readln(I);
if MemHeap then
begin
New(Head);
Head^.Sn := I; Head^.Link := Nil;
if Linker1<>Nil then Linker2^.Link := Head else Linker1:=Head;
Linker2 := Head;
IoMem := True;
end else
begin
Writeln;Write('Khong con du bo nho cho thu tuc New(Head), OK!...');
IoMem := False;
end;
end;
{ ==================== }
begin
ClrScr; Linker1 := Nil; Linker2 := Nil; IoHead := True;
Writeln('Chuong trinh the hien cac so nguyen dung thu tuc New()...');
Writeln('Hay nhap so nguyen: '); X := WhereX; Y := WhereY;
While IoHead do
begin
Gotoxy(X,Y); ClrEol; NhapsoNguyen(IoHead);
if IoHead then
begin
Write('N hap tiep (Y/N)?');
Ch := Readkey; Ch := UpCase(Ch);
if Not (Ch in ['Y'] ) then IoHead := False else
Gotoxy(0 1,WhereY); ClrEol; { xoa cuoi dong }
end;
end; { end While }
{ ================== cho hien lai danh sach vua nhap }
Writeln; Writeln('Danh sach cac so nguyen ma ban vua nhap:');
Head := Linker1;
While Head <>Nil do
begin
Write(Head^.Sn,' '); Head := Head^.Link;
end;
Writeln; Write('An phim bat ki de chuong trinh ket thuc...'); Readkey;
end.
{ ========================= }
Chú ý :
Bạn khai báo Head^.sn là integer, cho nên phải nhập sn trong giới hạn là Low(Head^.Sn)...High(Head^.Sn), nghĩa là từ -32768..32767 thì chương trình mới chạy đúng. Nếu muốn nhập số cao hơn thì phải khai báo là Real hoặc LongInt (số nguyên dương).
Bạn hãy dùng thủ tục Mark() và Release() để giải phóng hết ô nhớ sau khi kết thúc chương trình.
Đây chỉ là danh sách liên kết 1 chiều, nhưng lại theo kiểu FIFO, cái nào nhập vào trước thì lấy ra trước. Tôi còn 1 chiêu nữa thể hiện danh sách 2 chiều, nghĩa là có thể cho hiện ra số đứng trước hoặc số đứng sau nó. Ví dụ:
...... 10 11 12 .....
Bạn đang ở tại vị trí con số 11, bây giờ tôi ấn phím Left, nó hiện ra con 10 hoặc tôi ấn phím right, nó lại hiện ra con 12.
Cái này thì cũng dễ thôi, bạn khai báo trong record:
Pt = ^Ds;
Ds = Record
Sn : Integers;
Next : Pt;
Back : Pt;
end;
Và sau đó, thể hiện liên kết bằng:
New(Head);
Head^.Sn := I;
Head^.Next := Nil;
Head^.Back := Linker2;
if Linker1<>Nil then....
Đoạn sau cũng giống như trên.
{ ===============================}
Chương trình tôi chưa Test thử, nếu có chỗ nào sai thì bạn ngâm kíu chỉnh lại nhé...
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.