yığın ve kuyruk arasındaki temel fark nedir?


130

Yığın ve kuyruk arasındaki temel fark nedir?

Lütfen bana yardım edin, farkı bulamıyorum.

Bir yığın ve bir kuyruğu nasıl ayırt edersiniz?

Cevabı çeşitli linklerde aradım ve bu cevabı buldum ..

Üst düzey programlamada,

bir yığın, yeni elemanların mevcut elemanların "üstüne" yerleştirilmesiyle uzatılan ve elemanların mevcut elemanların üstünden kaldırılarak kısaltılan bir eleman listesi veya dizisi olarak tanımlanır. Bu, "push" ve "pop" matematik işlemlerine sahip bir ADT [Özet Veri Tipi] 'dir.

Kuyruk, yeni öğenin mevcut öğenin arkasına yerleştirilmesiyle eklenen ve kuyruğun önündeki öğeler kaldırılarak kısaltılan öğeler dizisidir. Bir ADT [Özet Veri Tipi] 'dir. Java, C ++, Python ve benzerlerinin programlanmasında anlaşılan bu terimlerden daha fazlası var.

Daha detaylı bir cevap alabilir miyim? Lütfen bana yardım et.


12
Görünüşe göre kendi sorunuzu yanıtlamışsınız - bir yığın, Son Giren İlk Çıkar (LIFO) kapsayıcıdır ve kuyruk, İlk Giren İlk Çıkar (FIFO) kapsayıcısıdır.
Iridium

Yanıtlar:


151

Yığın bir LIFO (son giren ilk çıkar) veri yapısıdır. Wikipedia ile ilgili bağlantı, ayrıntılı açıklama ve örnekler içerir.

Kuyruk bir FIFO (ilk giren ilk çıkar) veri yapısıdır. Wikipedia ile ilgili bağlantı, ayrıntılı açıklama ve örnekler içerir.


131

Bir deste kağıt hayal edin . Yığına konan son parça üsttedir, bu nedenle ilk çıkan parça olur. Bu LIFO . Bir parça kağıt eklemeye "itme", bir kağıt parçasını çıkarmaya ise "fırlatma" denir.

Mağazada bir kuyruk düşünün . Sıradaki ilk kişi, çizgiyi aşan ilk kişidir. Bu FIFO . Sıraya giren bir kişi "sıraya alınır" ve sıra dışına çıkan kişi "sıraya alınır".


3
Aklıma gelen en iyi benzetmelerden biri.
Yeikel

83

Görsel Bir Model

Gözleme Yığını (LIFO)

Bir tane eklemenin ve / veya kaldırmanın tek yolu yukarıdan.

gözleme yığını

Hat Sırası (FIFO)

Biri geldiğinde kuyruğun sonuna gelirler ve biri ayrıldığında kuyruğun önünden ayrılırlar.

dmv hattı

Eğlenceli gerçek: İngilizler kuyruk olarak insan dizisine atıfta bulunuyor


6
Jee, bu cevap imo olmalı. Teşekkürler @Jacksonkr
Kulasangar

Haha, bunun Queue ve Stack'in mükemmel bir açıklaması olduğundan eminim, ama sadece tartışmalar için, peki ya ilk krepin tabağa eklenmesini istersem? Bunun bir stack.size () ve if (! Stack.isEmpty ()) ile tamamlanabileceğini biliyorum, ancak yine de ilk krep en iyisi olabilir :) ... Her iki durumda da güzel cevap ve buna katılıyorum En açık olanı ... İngilizlerin satırları Kuyruklar olarak adlandırması ilginç görünüyor (eğer bu doğruysa), programlama dışı bir dilde, yine de ilk girişin (satırdan / kuyruktan çıktıktan sonra) ilk ayrıldığı bir satır olduğunu düşünürdüm. )
ViaTech

Bekle, başka yerlerde kuyruk olarak adlandırılmıyorlar mı?
gezintiniz

37

Her ikisini de sıralı bir şeyler listesi olarak düşünebilirsiniz (listeye eklendikleri zamana göre sıralanmıştır). İkisi arasındaki temel fark, yeni öğelerin listeye nasıl girdiği ve eski öğelerin listeden nasıl çıktığıdır.

Yığın için, eğer bir listem varsa a, b, cve deklersem, sonunda ele geçirilir, bu yüzden elde ederim a,b,c,d. Listenin bir öğesini açmak istersem, eklediğim son öğeyi kaldırırım, yani d. Bir patlamadan sonra listem şimdi a,b,cyeniden

Bir kuyruk için aynı şekilde yeni elemanlar eklerim. ekledikten sonra a,b,colur . Ama şimdi patladığımda, listenin önünden bir öğe almam gerekiyor, o yüzden oluyor .a,b,c,ddb,c,d

Çok basit!


14

kuyruk

Sıra, sıralı bir öğe koleksiyonudur.

Sıranın 'ön' ucu adı verilen bir uçta öğeler silinir.

Öğeler, kuyruğun 'arkası' adı verilen diğer uca eklenir.

Eklenen ilk öğe, ilk kaldırılacak olan öğedir (FIFO).

yığın

Yığın, öğelerden oluşan bir koleksiyondur.

Yalnızca bir veri öğesine erişim sağlar: eklenen son öğe.

Öğeler, 'Yığının tepesi' adı verilen bir uca eklenir ve silinir.

Dinamik ve sürekli değişen bir nesnedir.

Tüm veri öğeleri yığının üstüne yerleştirilir ve üst kısımdan çıkarılır

Bu erişim yapısı Last in First out yapısı (LIFO) olarak bilinir.


Yani temelde bir 'kuyruk' bir "FIFO" dur - ilk giren ilk çıkan kuyruğudur. Bir 'yığın' bir "LIFO" iken - son giren ilk çıkar kuyruğu. Doğrumuyum?
Sebastian Nielsen

@SebastianNielsen Evet, cevapta belirtildiği gibi doğru.
Dissanayake

Ancak bağlantılı bir liste ile yığın arasındaki fark nedir? Aynı değil mi?
Sebastian Nielsen

@SebastianNielsen Yığın bir ADT'dir, yani push ve pop işlemi olan bir arabirimi açığa çıkarır, ancak temeldeki mekanizma (uygulama) son kullanıcıdan gizlenir. Yığın, bir dizi veya bağlantılı bir liste ile uygulanabilir.
gdyrrahitis

13

YIĞININIZ:

  1. Yığın, öğeleri yalnızca yığının en üstüne ekleyebileceğimiz veya silebileceğimiz bir öğe listesi olarak tanımlanır.
  2. Bir yığının davranışı, Last-In First-Out (LIFO) sistemine benzer.
  3. Yığın, parametreleri işlevler arasında geçirmek için kullanılır. Bir fonksiyon çağrısında, parametreler ve yerel değişkenler bir yığın üzerinde saklanır.
  4. Özyineleme için destek sağlayan Pascal, c, vb. Gibi yüksek seviyeli programlama dilleri, defter tutma için yığını kullanır. Her özyinelemeli çağrıda, parametrelerin mevcut değerini, yerel değişkenleri ve dönüş adresini (kontrolün çağrıdan sonra geri dönmesi gereken adres) kaydetme ihtiyacı olduğunu unutmayın.

KUYRUK:

  1. Kuyruk, aynı tür öğelerin bir koleksiyonudur. Listenin arkası olarak adlandırılan listenin bir ucunda eklemelerin yer alabildiği ve silme işlemlerinin yalnızca listenin ön adı olarak adlandırılan diğer ucunda yer alabildiği doğrusal bir listedir.
  2. Bir kuyruğun davranışı, İlk Giren İlk Çıkar (FIFO) sistemine benzer.

Oldukça emin sonunda eklemek veya yığının çok başlayabilirsiniz ediyorum, burada dikkat edilmesi gereken önemli şey FIFO vs LIFO olduğunu düşünüyorum
Mike

6

Yığın, her seferinde biri depolanabilen ve geri alınabilen bir öğeler koleksiyonudur. Öğeler, saklama sürelerinin tersi sırayla geri alınır, yani depolanan en son öğe, geri alınacak bir sonraki öğedir. Yığın bazen Son Giren İlk Çıkar (LIFO) veya İlk Giren Son Çıkar (FILO) yapısı olarak adlandırılır. Daha önce depolanan öğeler, en son öğe (genellikle "üst" öğe olarak adlandırılır) alınana kadar geri alınamaz.

Sıra, her seferinde bir tane olmak üzere depolanabilen ve geri çağrılabilen öğeler koleksiyonudur. Öğeler, saklama sürelerine göre geri alınır, yani depolanan ilk öğe, geri alınacak sonraki öğedir. Bir kuyruğa bazen İlk Giren İlk Çıkar (FIFO) veya Son Giren Son Çıkar (LILO) yapısı denir. Daha sonra depolanan öğeler, ilk öğe (genellikle "ön" öğe olarak adlandırılır) alınana kadar geri alınamaz.


2

STACK: Yığın, yalnızca yığının en üstündeki öğeleri ekleyebileceğimiz veya silebileceğimiz bir öğe listesi olarak tanımlanır.

Yığın, parametreleri işlevler arasında geçirmek için kullanılır. Bir fonksiyon çağrısında, parametreler ve yerel değişkenler bir yığın üzerinde saklanır.

Yığın, her seferinde biri depolanabilen ve geri alınabilen bir öğeler koleksiyonudur. Öğeler, saklama sürelerinin tersi sırayla geri alınır, yani depolanan en son öğe, geri alınacak bir sonraki öğedir. Yığın bazen Son Giren İlk Çıkar (LIFO) veya İlk Giren Son Çıkar (FILO) yapısı olarak adlandırılır. Daha önce depolanan öğeler, en son öğe (genellikle "üst" öğe olarak adlandırılır) alınana kadar geri alınamaz.

KUYRUK:

Kuyruk, aynı tür öğelerin bir koleksiyonudur. Listenin arkası olarak adlandırılan listenin bir ucunda eklemelerin yer alabildiği ve silme işlemlerinin yalnızca listenin ön adı olarak adlandırılan diğer ucunda yer alabildiği doğrusal bir listedir.

Sıra, her seferinde bir tane olmak üzere depolanabilen ve geri çağrılabilen öğeler koleksiyonudur. Öğeler, saklama sürelerine göre geri alınır, yani depolanan ilk öğe, geri alınacak sonraki öğedir. Bir kuyruğa bazen İlk Giren İlk Çıkar (FIFO) veya Son Giren Son Çıkar (LILO) yapısı denir. Daha sonra depolanan öğeler, ilk öğe (genellikle "ön" öğe olarak adlandırılır) alınana kadar geri alınamaz.


2

Bir yığın ve bir kuyruğun açıklamasını denemek ve aşırı basitleştirmek için, Her ikisi de zincirin bir ucundan erişilebilen dinamik bilgi öğeleri zincirleridir ve aralarındaki tek gerçek fark şudur:

bir yığınla çalışırken

  • zincirin bir ucuna öğeler eklersiniz ve
  • zincirin aynı ucundaki öğeleri alır ve / veya kaldırırsınız

kuyruktayken

  • zincirin bir ucuna öğeler eklersiniz ve
  • onları diğer uçtan alır / kaldırırsınız

NOT : Bu bağlamda soyut geri alma / kaldırma ifadesini kullanıyorum çünkü öğeyi zincirden yeni aldığınızda veya bir anlamda yalnızca okuduğunuzda veya değerine eriştiğinizde, ancak öğeyi kaldırdığınız durumlar da vardır. zincir ve son olarak, aynı çağrı ile her iki eylemi de gerçekleştirdiğiniz durumlar vardır.

Ayrıca element kelimesi, hayali zinciri olabildiğince soyutlamak ve onu belirli programlama dili terimlerinden ayırmak için bilinçli olarak kullanılır. Öğe adı verilen bu soyut bilgi varlığı, dile bağlı olarak herhangi bir şey olabilir, bir işaretçi, bir değer, bir dizgi veya karakterler, bir nesne, ...

Çoğu durumda, aslında ya bir değer ya da bellek konumu (yani bir işaretçi) olsa da. Gerisi de bu gerçeği dil jargonunun arkasına saklıyor <

Sıra, öğelerin sıralaması önemli olduğunda ve öğelerin programınıza ilk girdiği zamanki ile tamamen aynı olması gerektiğinde yardımcı olabilir. Örneğin, bir ses akışını işlediğinizde veya ağ verilerini arabelleğe aldığınızda. Veya herhangi bir tür depolama ve ileri işlem yaptığınızda. Tüm bu durumlarda, programınıza geldiklerinde aynı sırada çıkacak öğelerin sırasına ihtiyacınız vardır, aksi takdirde bilgiler anlam ifade etmeyebilir. Bu nedenle, programınızı bazı girdilerden veri okuyan, bazılarını işleyen ve bunları bir kuyruğa yazan ve kuyruktan veri alan bir parçayı işleyen ve verileri daha fazla işlemek veya iletmek için başka bir kuyrukta depolayan bir bölümde kırabilirsiniz. .

Programınızın hemen adım (lar) ında kullanılacak bir öğeyi geçici olarak saklamanız gerektiğinde yığın yararlı olabilir. Örneğin, programlama dilleri genellikle değişkenleri işlevlere geçirmek için bir yığın yapısı kullanır. Gerçekte yaptıkları şey, işlev argümanlarını yığında depolamak (veya itmek) ve ardından yığından aynı sayıda öğeyi kaldırdıkları ve aldıkları (veya patladıkları) işleve atlamaktır. Bu şekilde yığının boyutu, iç içe geçmiş işlev çağrılarının sayısına bağlıdır. Ek olarak, bir işlev çağrıldıktan ve yaptığı işi bitirdikten sonra, yığını çağrılmadan önceki haliyle tamamen aynı durumda bırakır! Bu şekilde, herhangi bir işlev, diğer işlevlerin onunla nasıl çalıştığını görmezden gelerek yığınla çalışabilir.

Son olarak, benzer kavramlar için aynı yerde kullanılan başka terimler olduğunu bilmelisiniz. Örneğin bir yığın, yığın olarak adlandırılabilir. Bu kavramların hibrit versiyonları da vardır, örneğin çift uçlu bir kuyruk aynı anda hem yığın hem de kuyruk olarak davranabilir, çünkü her iki uçtan aynı anda erişilebilir. Ek olarak, bir veri yapısının size bir yığın veya bir kuyruk olarak sunulması, bu şekilde uygulandığı anlamına gelmez, bir veri yapısının herhangi bir şey olarak uygulanabileceği ve belirli bir veri yapısı basitçe böyle davranması sağlanabilir. Başka bir deyişle, herhangi bir veri yapısına bir itme ve pop yöntemi sağlarsanız, bunlar sihirli bir şekilde yığın haline gelir!


Kod olmayan metinler için kod biçimlendirmesi kullanmayın.
Marquis of Lorne

1

STACK bir LIFO (son giren, ilk çıkar) listesidir. Bu, yığına 3 öğenin eklendiğini varsayalım, yani 10,20,30. İlk önce 10 eklenir & 30 en son eklenir, böylece 30 önce yığından ve en son 10 yığından silinir. Bu bir LIFO listesidir (Son Giren İlk Çıkar).

KUYRUK FIFO listesidir (İlk Giren İlk Çıkar). İlk önce bir elemanın ekleneceği ve ilk önce silineceği anlamına gelir. Örneğin halkların kuyruğu.


1

Dikkate alınan bir koleksiyonu yığınlar. Öncelikle, bir koleksiyonun diğer küçük NESNELERİ toplayan ve organize eden bir NESNE olduğunu anlayın. Bu daha küçük NESNELER genellikle Öğeler olarak adlandırılır. Bu öğeler, yığın üzerinde A'nın ilk ve C'nin son olduğu bir ABC sırasına göre "İtilir". dikey olarak şöyle görünür: 3. eleman eklendi) C 2. eleman eklendi) B 1. eleman eklendi) A

Yığına ilk eklenen "A" nın altta olduğuna dikkat edin. Yığından "A" yı kaldırmak istiyorsanız, önce "C" yi, ardından "B" yi ve son olarak da hedef öğeniz "A" yı kaldırmanız gerekir. Yığın, bir yığının karmaşıklığıyla uğraşırken bir LIFO yaklaşımı gerektirir. (Son Giren İlk Çıkar) Bir yığından bir öğe kaldırırken, doğru sözdizimi açılır. yığından bir öğeyi kaldırmayız, onu "çıkarırız".

"A" nın yığına itilen ilk öğe olduğunu ve "C" nin yığına itilen son öğe olduğunu hatırlayın. Yığının altında ne olduğunu görmek istediğinize karar verirseniz, 3 eleman yığının üzerindedir ve A birinci B ikinci ve C üçüncü eleman olmak üzere, üst kısım kaldırılmalı sonra yığının altını görmek için ikinci eleman eklendi.


Daha iyi ve daha okunaklı görünmesi için lütfen sorunuzu biçimlendirin.
Neeku
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.