View Full Version : کار با پشته و صف در ساختمان داده
  
mgmreza
دوشنبه 03 تیر 1387, 18:35 عصر
با سلام
من در ساختمان داده در نوشتن برنامه هايي مانند برنامه زير مشکل دارم :
برنامه اي که عددي را دريافت کرده و اگر زوج بود آن را در پشته قرار دهد و اگر فرد بود آن را در صف قرار دهد. من نميدانم که چگونه وقتي عدد زوج را به دست آوردم آن را در پشته قرار دهم. اگر در اين مورد برنامه اي داريد لينک دانلود آن را قرار دهيد و راهنمايي بفرماييد.
با تشکر
mgmreza
سه شنبه 04 تیر 1387, 03:56 صبح
با سلام
من در ساختمان داده در نوشتن برنامه هايي مانند برنامه زير مشکل دارم :
برنامه اي که عددي را دريافت کرده و اگر زوج بود آن را در پشته قرار دهد و اگر فرد بود آن را در صف قرار دهد. من نميدانم که چگونه وقتي عدد زوج را به دست آوردم آن را در پشته قرار دهم. اگر در اين مورد برنامه اي داريد لينک دانلود آن را قرار دهيد و راهنمايي بفرماييد.
با تشکر
 
سلام
لطفا به سوال فوق پاسخ دهید چون خیلی فوری است
با تشکر
mehdad.koulab
سه شنبه 04 تیر 1387, 14:12 عصر
سلام دوست عزیز این الگوریتم ذخیره در پشته
Procedure  push  (item)
      Begin
              If  top  <>  n  then
                   Begin
                          Top : = top + 1;
                           Stack [top] : = item;
        End
Else
        Write (‘stack is  full’);
End;
اینم بازیابی از پشته
Procedure  pop  (var item)
      Begin
              If  top  <>  0  then
                   Begin
                           Item : = Stack [top];
                           Top : = top - 1;
 
       End
Else
        Write (‘stack  is  empity’);
End;
mehdad.koulab
سه شنبه 04 تیر 1387, 14:15 عصر
اینم الگوریتمهای مربوط به صف
ذخیره (اضافه کردن داده به صف)
Procedure  addqueue   (item)
    Begin
             If  rear = n  then //شرط بررسی پر بودن صف 
                 Write ( ‘Queue  is  full’ ) //پیغام پر بودن صف
             Else
                  Begin
                          Rear : = rear + 1;
                          Queue[rear] : = item ;
                    end ; 
      End ; 
اینم بازیابی یا همون حذف
Procedure  delete Queue  (var item)
    Begin
            If  front = rear  then //شرط بررسی خالی بودن صف 
                 Write (‘Queue is Empty’);پیغام خالی بودن صف
            Else
                 Begin
                        Front : = front+1 ;
                        Item : = Queue[front] ;
                  end ;
      End ;
البته اینا برای صف خطی بود حلقوی رو تو پست بعدی می ذارم
mehdad.koulab
سه شنبه 04 تیر 1387, 14:18 عصر
اینم صف حلقوی
اضافه کردن عنصر
 
Procedure   add circular queue   (item)
       Begin
               Rear : = ( rear + 1 ) mod n ;
                If   rear = front   then 
                          Wrtite  (‘Queue is full’) ;
                 Else
                       q [ rear ] : =  item ;
        end ; 
اینم حذف عنصر
Procedure    delete circular Queue    ( var item )
        Begin
               If   front = rear   then  
                    Write ( ‘ Queue  is  empty ’ ) ; 
               Else
                     Begin
                             Front : = ( front + 1 ) mod n ;
                                 Item : = q [ front ] ;
                      End ;
            End ;
Dadai ahmad
چهارشنبه 05 تیر 1387, 20:20 عصر
میشه الگوریتم pop,pudh پشته های دو پیوندی هم بذارین؟
خیلی ممنون
mehdad.koulab
شنبه 15 تیر 1387, 17:16 عصر
میشه الگوریتم pop,pudh پشته های دو پیوندی هم بذارین؟
خیلی ممنون
 سلام دوست عزیز اگه منظورتون لیستهای پیوندی دو طرفه باشه بگین بذارم وگرنه من پشته دو پیوندی رو بلد نیستم.
morycom
سه شنبه 10 مرداد 1391, 09:14 صبح
سلام دوست عزیز اگه منظورتون لیستهای پیوندی دو طرفه باشه بگین بذارم وگرنه من پشته دو پیوندی رو بلد نیستم.
 
دوست عزيز كدي كه در بالا براي اضافه به صف حلقوي نوشتيد اشتباه هست
چون دو مشكل داره
1- rear  هميشه بايد به اخرين عنصر صف اشاره كنه ولي در اين برنامه وقتي صف پر بشه به يك مكان خالي اشاره ميكنه
2- باز هم شرط پر و خالي بودن صفها يكي هستند (سعي كنيد يه بار آرايه را پر كنيد اگر ما صفي از 0 ت 5 داشته باشيم
و وضعيت فعلي rear=5 و front = 0 باشه  و بخواهيم يك عنصر ديگر به ته صف اضافه كنيم آنوقت داريم:
rear=(rear+1)%6  در اين صورت rear =0 خواهد شد و front=0 نيز مساوي صفر است 
همانطور كه ميبيني در عين حال كه صف خالي است همزمان صف پر نيز ميباشد
براي تصحيح اين اشتباه بايد شرط موجود در قسمت add را به صورت زير تغيير دهيد
void addq(items k)
{
if (front==(rear+1)%n)
queufull();
else {
rear=(rear+1)%n; 
q[rear]=k;
}
موفق باشيد:خجالت::چشمک:
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.