چند سوال ساختمان داده در پاسکال

draria

Member
سوالم در مورد ساختمان داده است با پاسکال
1-حذف عناصر یکسان در یک لیست
2-زیر برنامه ای بنویسید (l,x ) - که purge که تمام رخدادهای x را از لیست L حذف کند
 
آخرین ویرایش:
اگر ممکنه سوالات رو با مثال بگو که متوجه منظورت بشم!
ما تو ساختمان داده معمولا با شبه کد (سودو کد( کار می کنیم
سوالت رو بگو من با شبه کد شاید بتونم جواب بدم ولی پاسکال بلد نیستم!
 

draria

Member
زیر برنامه ای بنویسید که عناصر لیست را چاپ کند
کد:
کد:
begin
p:=first (L);
while<> null {
write (retrieve (l,p);
p:next (l,p);
}
}
حالا ممنون اگر این سوالات رو هم هرجوری بلدی جواب بدی
 
نمی دونم متوجه این کدا میشی یا نه!‌چون شبه کد آزاده تقریبا!‌یعنی در واقع خیلی به گرامر زبان توجه نمیشه و بیشتر منطق مسئله مهمه و کاری نداریم که تو زبان های برنامه نویسی چطوری میشه!
این که نوشتم فکر کنم درست باشه البته چون شنبه انتحان دارم نرسیدم چکش کنم! نهایتا اگه غلط باشه با چند تا پس و پیش کردن دستورا درست میشه!
اون یکی سوال یعنی هر چی دیتای مشابه دیتای داده شده داره حذف شه؟ اگر ممکنه درباره ی منظور سوال 2 بیش تر توضیح بده
فرض کن آدرس سر لیستمون h باشه
کد:
z=h
p=h
q=link(h)
while (link(p)!= null)
{
    while(q!=null)
   {
       if (data(q)==data(p))
      {
          link(z)=link(q)
         free(q)
         q=link(z)
      else
      {
          z=q
         q=linq(q)
      }
   p=link(p)
}
 

draria

Member
خودمم هم سوال دوم رو اصلا متوجه نشدم سوال دیگه ای هم که دارم پیاده سازی delete حذف یا استفاده از اشاره گر اندیس دار هست اگر بتونی کمکی کنی ممنون میشم
 

the_king

مدیرکل انجمن
تعاریف اولیه لیست و عنصر و یک متغیر عمومی L از نوع لیست:
کد:
uses crt;
type
    list = ^list_item;
    item = ^record_item;
    list_item = record
        start : item;
    end;
    record_item = record
        value : string;
        next : item;
    end;
var
    L : list;

پیدا کردن اولین عضو لیست توسط تابع first :
کد:
function first (L : list) : item;
begin
    first := L^.start;
end;

ایجاد کردن یک لیست تهی توسط روتین create :
کد:
procedure create (L : list);
begin
    L^.start := nil;
end;

پیدا کردن عنصر بعدی لیست توسط تابع next :
کد:
function next (L : list; P : item) : item;
begin
    next := P^.next;
end;

دریافت مقدار یک عنصر (یک رشته string) توسط تابع retrieve :
کد:
function retrieve (L : list; P : item) : string;
begin
    retrieve := P^.value;
end;

پیدا کردن آخرین عضو لیست توسط تابع last :
کد:
function last (L : list) : item;
var
    P : item;
begin
    P := first (L);
    if P <> nil then
        while (next (L, P) <> nil) do
            P := next (L, P);
    last := P;
end;

اضافه کردن یک عنصر به انتهای لیست توسط تابع add (این تابع عنصر جدید را بر می گرداند) :
کد:
function add (L : list; S : string) : item;
var
    newitem : item;
begin
    new (newitem);
    newitem^.value := S;
    newitem^.next := nil;
    if first (L) = nil then
       L^.start := newitem
    else
       last (L)^.next := newitem;
    add := newitem;
end;

حذف کردن یک عنصر مشخص از لیست توسط تابع remove (این تابع اولین عنصر بعد از عنصر حذف شده را بر می گرداند) :
کد:
function remove (L : list; P : item) : item;
var
    R : item;
begin
    R := first (L);
    if R <> nil then
        if R = P then
        begin
            L^.start := next (L, P);
            remove := first (L);
            dispose (P);
        end
        else
            while (next (L, R) <> nil) do
                if next (L, R) = P then
                begin
                    R^.next := next (L, P);
                    remove := next (L, P);
                    dispose (P);
                    break;
                end
                else
                    R := next (L, R);
end;

حذف کردن تمامی عناصری که یک مقدار مشخص (یک رشته string) دارند توسط روتین clean :
کد:
procedure clean (L : list; S : string);
var
    P: item;
begin
    P := first (L);
    while (P <> nil) do
        if S = retrieve (L, P) then
            P := remove (L, P)
        else
            P := next (L, P);
end;

حذف کردن تمامی عناصر شامل هرگونه مقدار تکراری در لیست توسط روتین cleanup :
کد:
procedure cleanup (L : list);
var
    P, R : item;
begin
    P := first (L);
    while (P <> nil) do
    begin
        R := next (L, P);
        while (R <> nil) do
            if retrieve (L, P) = retrieve (L, R) then
                R := remove (L, R)
            else
                R := next (L, R);
        P := next (L, P);
    end;
end;

چاپ مقادیر کلیه عناصر لیست توسط روتین print :
کد:
procedure print (L : list);
var
    P : item;
begin
    P := first (L);
    while (P <> nil) do
    begin
        write( retrieve (L, P), ' > ');
        P := next (L, P);
    end;
    writeln ('Null');
end;

روتین اصلی برنامه ای که یک لیست تهی می سازد و چاپ می کند.
سپس به ترتیب عناصری با مقادیر 0 و 1 و 2 و 4 و 2 و 2 و 4 و 1 و 3 و 4 را به آن اضافه می کند و چاپ می نماید.
سپس اولین عنصر آنرا حذف نموده و چاپ می نماید.
سپس آخرین عنصر آنرا حذف نموده و چاپ می نماید.
سپس تمامی عناصری که مقدار 4 دارند را حذف نموده و چاپ می نماید.
سپس تمامی عناصری که مقادیر تکراری دارند را حذف نموده و چاپ می نماید.

کد:
begin
    clrscr;
    create (L);
    print (L);
    add (L, '0');
    add (L, '1');
    add (L, '2');
    add (L, '4');
    add (L, '2');
    add (L, '2');
    add (L, '4');
    add (L, '1');
    add (L, '3');
    add (L, '4');
    print (L);
    remove (L, first (L));
    print (L);
    remove (L, last (L));
    print (L);
    clean (L, '4');
    print (L);
    cleanup (L);
    print (L);
    readkey;
end.

کد کامل چنین برنامه ای چنین خواهد بود :
کد:
uses crt;
type
    list = ^list_item;
    item = ^record_item;
    list_item = record
        start : item;
    end;
    record_item = record
        value : string;
        next : item;
    end;
var
    L : list;

function first (L : list) : item;
begin
    first := L^.start;
end;

procedure create (L : list);
begin
    L^.start := nil;
end;

function next (L : list; P : item) : item;
begin
    next := P^.next;
end;

function retrieve (L : list; P : item) : string;
begin
    retrieve := P^.value;
end;

function last (L : list) : item;
var
    P : item;
begin
    P := first (L);
    if P <> nil then
        while (next (L, P) <> nil) do
            P := next (L, P);
    last := P;
end;

function add (L : list; S : string) : item;
var
    newitem : item;
begin
    new (newitem);
    newitem^.value := S;
    newitem^.next := nil;
    if first (L) = nil then
       L^.start := newitem
    else
       last (L)^.next := newitem;
    add := newitem;
end;

function remove (L : list; P : item) : item;
var
    R : item;
begin
    R := first (L);
    if R <> nil then
        if R = P then
        begin
            L^.start := next (L, P);
            remove := first (L);
            dispose (P);
        end
        else
            while (next (L, R) <> nil) do
                if next (L, R) = P then
                begin
                    R^.next := next (L, P);
                    remove := next (L, P);
                    dispose (P);
                    break;
                end
                else
                    R := next (L, R);
end;

procedure clean (L : list; S : string);
var
    P: item;
begin
    P := first (L);
    while (P <> nil) do
        if S = retrieve (L, P) then
            P := remove (L, P)
        else
            P := next (L, P);
end;

procedure cleanup (L : list);
var
    P, R : item;
begin
    P := first (L);
    while (P <> nil) do
    begin
        R := next (L, P);
        while (R <> nil) do
            if retrieve (L, P) = retrieve (L, R) then
                R := remove (L, R)
            else
                R := next (L, R);
        P := next (L, P);
    end;
end;

procedure print (L : list);
var
    P : item;
begin
    P := first (L);
    while (P <> nil) do
    begin
        write( retrieve (L, P), ' > ');
        P := next (L, P);
    end;
    writeln ('Null');
end;

begin
    clrscr;
    create (L);
    print (L);
    add (L, '0');
    add (L, '1');
    add (L, '2');
    add (L, '4');
    add (L, '2');
    add (L, '2');
    add (L, '4');
    add (L, '1');
    add (L, '3');
    add (L, '4');
    print (L);
    remove (L, first (L));
    print (L);
    remove (L, last (L));
    print (L);
    clean (L, '4');
    print (L);
    cleanup (L);
    print (L);
    readkey;
end.
 

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

بالا