Veri Yapısı ve Algoritmalar - Yığın
Yığın, çoğu programlama dilinde yaygın olarak kullanılan bir Soyut Veri Tipidir (ADT). Örneğin, gerçek dünyadaki bir yığın gibi davrandığı için yığın olarak adlandırılır - bir kart destesi veya bir tabak yığını vb.
Gerçek dünyadaki bir yığın, işlemlere yalnızca bir uçta izin verir. Örneğin, yalnızca yığının üst kısmına bir kart veya plaka yerleştirebilir veya çıkarabiliriz. Aynı şekilde, Stack ADT, tüm veri işlemlerine yalnızca bir uçta izin verir. Herhangi bir zamanda, bir yığının yalnızca en üst öğesine erişebiliriz.
Bu özellik onu LIFO veri yapısını yapar. LIFO, Son giren ilk çıkar anlamına gelir. Burada en son yerleştirilen (eklenen veya eklenen) elemana ilk olarak erişilir. Yığın terminolojisinde, ekleme işlemi denirPUSH operasyon ve kaldırma işlemi denir POP operasyon.
Yığın Gösterimi
Aşağıdaki şema bir yığını ve işlemlerini göstermektedir -
Dizi, Yapı, İşaretçi ve Bağlantılı Liste aracılığıyla bir yığın uygulanabilir. Yığın sabit boyutlu olabilir veya dinamik yeniden boyutlandırma hissine sahip olabilir. Burada, dizileri kullanarak yığını uygulayacağız, bu da onu sabit boyutlu bir yığın uygulaması yapar.
Temel işlemler
Yığın işlemleri yığını başlatmayı, onu kullanmayı ve sonra yeniden başlatmayı içerebilir. Bu temel şeylerin yanı sıra, aşağıdaki iki birincil işlem için bir yığın kullanılır -
push() - Yığın üzerindeki bir öğeyi itmek (depolamak).
pop() - Yığından bir öğeyi kaldırma (erişme).
Veriler yığına itildiğinde.
Bir yığını verimli bir şekilde kullanmak için yığının durumunu da kontrol etmemiz gerekir. Aynı amaçla, yığınlara aşağıdaki işlevsellik eklenir -
peek() - yığının en üstteki veri öğesini çıkarmadan elde edin.
isFull() - yığının dolu olup olmadığını kontrol edin.
isEmpty() - yığının boş olup olmadığını kontrol edin.
Her zaman, yığındaki en son PUSHed veriye bir işaretçi tutuyoruz. Bu işaretçi her zaman yığının en üstünü temsil ettiğinden,top. top işaretçi, yığının gerçekten çıkarmadan en üst değerini sağlar.
Öncelikle, yığın işlevlerini destekleme prosedürlerini öğrenmeliyiz -
dikizlemek()
Peek () işlevinin algoritması -
begin procedure peek
return stack[top]
end procedure
Peek () işlevinin C programlama dilinde uygulanması -
Example
int peek() {
return stack[top];
}
dolu()
İsfull () işlevinin algoritması -
begin procedure isfull
if top equals to MAXSIZE
return true
else
return false
endif
end procedure
C programlama dilinde isfull () işlevinin uygulanması -
Example
bool isfull() {
if(top == MAXSIZE)
return true;
else
return false;
}
boş()
İsempty () fonksiyonunun algoritması -
begin procedure isempty
if top less than 1
return true
else
return false
endif
end procedure
C programlama dilinde isempty () işlevinin uygulanması biraz farklıdır. Dizideki indeks 0'dan başladığından top'u -1'de başlatıyoruz. Bu nedenle, yığının boş olup olmadığını belirlemek için tepenin sıfırın altında mı yoksa -1 mi olduğunu kontrol ediyoruz. İşte kod -
Example
bool isempty() {
if(top == -1)
return true;
else
return false;
}
İtme İşlemi
Yığın üzerine yeni bir veri öğesi koyma işlemi, İtme İşlemi olarak bilinir. İtme işlemi bir dizi adım içerir -
Step 1 - Yığının dolu olup olmadığını kontrol eder.
Step 2 - Yığın doluysa, bir hata oluşturur ve çıkar.
Step 3 - Yığın dolu değilse artırın top sonraki boş alanı işaret etmek için.
Step 4 - Üstün işaret ettiği yığın konumuna veri öğesi ekler.
Step 5 - Başarı döndürür.
Yığını uygulamak için bağlantılı liste kullanılıyorsa, 3. adımda dinamik olarak alan ayırmamız gerekir.
PUSH İşlemi için Algoritma
İtme işlemi için basit bir algoritma aşağıdaki gibi türetilebilir -
begin procedure push: stack, data
if stack is full
return null
endif
top ← top + 1
stack[top] ← data
end procedure
Bu algoritmanın C'de uygulanması çok kolaydır. Aşağıdaki koda bakın -
Example
void push(int data) {
if(!isFull()) {
top = top + 1;
stack[top] = data;
} else {
printf("Could not insert data, Stack is full.\n");
}
}
Pop Operasyonu
Yığından kaldırılırken içeriğe erişim, Pop İşlemi olarak bilinir. Pop () işleminin bir dizi uygulamasında, bunun yerine veri öğesi aslında kaldırılmaz.topsonraki değere işaret etmek için yığında daha düşük bir konuma düşürülür. Ancak bağlantılı liste uygulamasında, pop () aslında veri öğesini kaldırır ve bellek alanını serbest bırakır.
Bir Pop işlemi aşağıdaki adımları içerebilir -
Step 1 - Yığının boş olup olmadığını kontrol eder.
Step 2 - Yığın boşsa, bir hata oluşturur ve çıkar.
Step 3 - Yığın boş değilse, veri elemanına erişir. top işaret ediyor.
Step 4 - Top değerini 1 azaltır.
Step 5 - Başarı döndürür.
Pop İşlemi için Algoritma
Pop işlemi için basit bir algoritma aşağıdaki gibi türetilebilir -
begin procedure pop: stack
if stack is empty
return null
endif
data ← stack[top]
top ← top - 1
return data
end procedure
Bu algoritmanın C'de uygulanması aşağıdaki gibidir -
Example
int pop(int data) {
if(!isempty()) {
data = stack[top];
top = top - 1;
return data;
} else {
printf("Could not retrieve data, Stack is empty.\n");
}
}
C programlama dilinde eksiksiz bir yığın programı için lütfen buraya tıklayın .