Yığının veri öğelerini itmek ve açmak için açık olan yalnızca bir ucu vardır. Kuyruk her iki ucunu da veri öğelerini sıkmak ve çıkarmak için açar.
Yığın ve sıra, veri öğelerini depolamak için kullanılan veri yapılarıdır ve aslında bazı gerçek dünya eşdeğerlerine dayanır. Örneğin, yığın CD'yi çıkarabileceğiniz ve CD yığınının tepesine yerleştirebileceğiniz bir yığın yığınıdır. Benzer şekilde, sıra, ilk sırada duran kişinin, yani sıranın önünde ilk hizmet verileceği ve gelen yeni sıranın sıranın arkasında (sıranın arkasında) görüneceği Tiyatro biletleri için bir sıradır.
Karşılaştırma Tablosu
Karşılaştırma için temel | yığın | kuyruk |
---|---|---|
Çalışma prensibi | LIFO (İlk giren ilk kişi) | FIFO (İlk giren ilk çıkar) |
yapı | Öğeleri eklemek ve silmek için aynı son kullanılır. | Bir uç sokmak için, yani arka uç ve diğer uç elemanların, yani ön ucun silinmesi için kullanılır. |
Kullanılan işaretçi sayısı | Bir | İki (Basit sıra halinde) |
Yapılan işlemler | Push ve Pop | Sıkma ve temizleme |
Boş durumun incelenmesi | Üst == -1 | Ön == -1 || Ön == Arka + 1 |
Tam durumun incelenmesi | Üst == Maks - 1 | Arka == Maks - 1 |
Varyantlar | Değişkenleri yoktur. | Dairesel sıra, öncelik sırasına, iki kat sona sıraya gibi değişkenler vardır. |
uygulama | Daha basit | Nispeten karmaşık |
Stack'un tanımı
Bir Yığın, ilkel olmayan bir doğrusal veri yapısıdır. Yeni öğenin eklendiği ve mevcut öğenin yığının tepesi (TOS) olarak adlandırılan yalnızca bir uçtan silindiği sıralı bir listedir. Bir yığına tüm silme ve yerleştirme yığının üstünden yapıldığı için, eklenen son eleman yığından ilk çıkarılacak olan olacaktır. Yığının İlk Giren İlk Çıkar (LIFO) liste türünün adı budur.
Yığın içinde sıkça erişilen öğenin en üstteki öğe olduğunu, oysa en son kullanılan öğenin yığının altında olduğunu unutmayın.
Örnek
Bazılarınız bisküvi (ya da Poppins) yiyebilir. Eğer varsayıyorsanız, kapağın sadece bir tarafı yırtılmış ve bisküviler birer birer çıkarılmıştır. Buna haşhaş denir ve benzer şekilde, eğer bir süre sonra bisküvileri korumak istiyorsanız, onları aynı parçalara ittirmek için aynı parçaya geri koyarsınız.
Kuyruk tanımı
Bir sıra, doğrusal olmayan bir veri yapısı ilkel olmayan türün kategorisine girer. Benzer tipte bir element koleksiyonudur. Yeni elemanların eklenmesi, arka uç adı verilen bir uçta gerçekleşir. Benzer şekilde, mevcut öğelerin silinmesi, Ön uç olarak adlandırılan diğer ucunda gerçekleşir ve mantıksal olarak bir İlk giren ilk çıkar (FIFO) liste tipidir.
Örnek
Gündelik hayatımızda, istenen hizmeti beklediğimiz birçok durumda karşımıza çıkmakta, sırayla hizmet almak için sıraya girmeliyiz. Bu bekleyen sıra, bir sıra olarak düşünülebilir.
Yığın ve Sıra Arasındaki Anahtar Farklılıklar
- Yığın, diğer yandan LIFO mekanizmasını izler. Sıra, öğeleri eklemek ve kaldırmak için FIFO mekanizmasını takip eder.
- Bir yığında, aynı uç elemanları eklemek ve silmek için kullanılır. Aksine, sıradaki öğeleri eklemek ve silmek için iki farklı uç kullanılır.
- Yığın yalnızca bir açık uca sahip olduğundan, yığının tepesine atıfta bulunmak için yalnızca bir işaretçi kullanılmasının nedeni budur. Ancak kuyruk, sıranın önüne ve arkasına işaret etmek için iki işaretçi kullanır.
- Yığın, push ve pop olarak bilinen iki işlemi gerçekleştirir; Kuyrukta ise, sorgulama ve düzenleme olarak bilinir.
- Yığın uygulaması daha kolay iken Sıra uygulaması zor.
- Sıra, dairesel sıra, öncelik sırasına, iki kat sona ermiş sıra vb. Değişkenlere sahiptir. Buna karşılık, yığının değişkenleri yoktur.
Yığın Uygulaması
Yığın iki şekilde uygulanabilir:
- Statik uygulama bir yığın oluşturmak için dizileri kullanır. Statik uygulama zahmetsiz bir teknik olsa da esnek bir oluşturma yöntemi değildir, çünkü program tasarımında yığının büyüklüğünün beyanı yapılması gerekir, bundan sonra büyüklük değiştirilemez. Ek olarak, statik uygulama bellek kullanımı konusunda çok verimli değildir. Zira bir dizinin (yığının uygulanması için) işlemin başlamasından önce (program tasarım zamanında) bildirilmesi. Şimdi sıralanacak elemanların sayısı istifte çok azsa, statik olarak ayrılmış hafıza boşa harcanacaktır. Öte yandan, istifte depolanacak daha fazla sayıda element varsa, kapasiteyi arttırmak için dizinin boyutunu değiştiremeyiz, böylece yeni elementleri barındırabiliriz.
- Dinamik uygulama aynı zamanda bağlantılı liste temsili olarak da adlandırılır ve yığın veri yapısı türünü uygulamak için işaretçiler kullanır.
Sıra Uygulaması
Kuyruk iki şekilde uygulanabilir:
- Statik uygulama : Bir sıra diziler kullanılarak uygulanırsa, sıraya koymak istediğimiz öğelerin tam sayısı, dizinin boyutunun tasarım zamanında veya işlem başlamadan önce bildirilmesi gerektiğinden emin olunmalıdır. Bu durumda, dizinin başlangıcı sıranın önü olur ve dizinin son konumu sıranın arkası görevi görür. Aşağıdaki ilişki, diziler kullanılarak uygulandığında kuyruktaki tüm öğelerin varlığını verir:
ön - arka + 1
Eğer "arka <ön" ise, sıradaki herhangi bir öğe olmayacak veya sıra daima boş olacaktır. - Dinamik uygulama : İşaretçileri kullanarak kuyrukları uygulayan ana dezavantaj, bağlı bir temsildeki bir düğümün, dizi temsilindeki karşılık gelen bir öğeden daha fazla bellek alanı kullanmasıdır. Her düğümde biri veri alanı için diğeri bir sonraki düğümün adresini depolamak için en az iki alan olduğundan, bağlantılı gösterimde sadece veri alanı vardır. Bağlantılı gösterimi kullanmanın yararı, bir başka eleman grubunun ortasına bir eleman yerleştirilmesi veya silinmesi gerektiğinde belirginleşir.
Yığın İşlemleri
İstif üzerinde çalıştırılabilecek temel işlemler şunlardır:
- PUSH : Yığının tepesine yeni bir eleman eklendiğinde, PUSH işlemi olarak bilinir. Yeni bir eleman en üste ekleneceği için, bir elemanın istif içerisine basılması elemanın eklenmesini gerektirir. Her basma işleminden sonra üst kısım bir artar. Dizi doluysa ve yeni öğe eklenemiyorsa, STACK-FULL koşulu veya STACK OVERFLOW olarak adlandırılır. PUSH OPERATION - C'deki işlev:
Dikkate alındığında yığın olarak ilan edilir.int stack [5], top = -1;
void push()
{
int item;
if (top < 4)
{
printf ("Enter the number") ;
scan ("%d", & item) ;
top = top + 1;
stack [top] = item;
}
else
{
printf (" Stack is full");
}
}
- POP : Bir öğe yığının üstünden silindiğinde POP işlemi olarak bilinir. Her pop işleminden sonra yığın bir azalır. Yığın üzerinde hiçbir eleman kalmamışsa ve pop gerçekleştirilirse, bu durum Yığının Boş olduğu anlamına gelen STACK UNDERFLOW durumuna neden olur. POP ÇALIŞTIRMA - C’deki işlevler:
Dikkate alındığında yığın olarak ilan edilir.int stack [5], top = -1;
void pop()
{
int item;
if (top >= 4)
{
item = stack [top];
top = top - 1;
printf ("Number deleted is = %d", item) ;
}
else
{
printf (" Stack is empty");
}
}
Kuyruktaki İşlemler
Kuyrukta gerçekleştirilebilecek temel işlemler şunlardır:
- Enqueue : Bir kuyruğa bir eleman eklemek için.
Sıra olarak ilan edildiint queue [5], Front = -1 and rear = -1;
void add ()
{
int item;
if ( rear < 4)
{
printf ("Enter the number") ;
scan ("%d", & item) ;
if (front == -1)
{
front =0 ;
rear =0 ;
}
else
{
rear = rear + 1;
}
queue [rear] = item ;
}
else
{
printf ("Queue is full") ;
}
}
- Dequeue : Bir öğeyi kuyruğundan silmek için. C'deki Ek işlem işlevi:
Sıra olarak ilan edildiint queue [5], Front = -1 and rear = -1;
void delete ()
{
int item;
if ( front ! = -1)
{
item = queue [ front ] ;
if (front == rear)
{
front =-1 ;
rear =-1 ;
}
else
{
front = front + 1;
printf ("Number deleted is = %d", item) ;
}
}
else
{
printf ("Queue is empty") ;
}
}
Yığın Uygulamaları
- Bir derleyicide ayrıştırma.
- Java sanal makinesi.
- Kelime işlemcide geri al.
- Web tarayıcısındaki Geri düğmesi.
- Yazıcılar için PostScript dili.
- İşlev derleyici içinde uygulama çağrıları yapar.
Kuyruk Uygulamaları
- Veri Tamponları
- Eşzamansız veri aktarımı (dosya IO, borular, soketler).
- Paylaşılan bir kaynakta tahsis istekleri (yazıcı, işlemci).
- Trafik analizi
- Bir süpermarkette sahip olacak kasiyer sayısını belirleyin.
Sonuç
Yığın ve Kuyruk, doğrusal veri yapıları, çalışma mekanizması, yapı, uygulama, değişkenler gibi belirli şekillerde farklılık gösterir, ancak ikisi de listedeki öğeleri depolamak ve öğelerin eklenmesi ve silinmesi gibi listedeki işlemleri gerçekleştirmek için kullanılır. Diğer kuyruk türlerini kullanarak telafi edilen basit kuyruğun bazı sınırlamaları olsa da.