C++ Kuyruğu nasıl kullanılır?

How Use C Queue



Tanıtım

Sıra, listeye eklenen ilk öğenin bir sonraki kaldırılacak ilk öğe olması gereken bir öğe koleksiyonudur. Yani koleksiyona parçalar eklendikçe boyutu da büyüyor yani boyu da büyüyor. Herhangi bir öğe kaldırılacağı zaman, ilk eklenen öğe olmalıdır. Öğeler sürekli olarak kaldırılıyorsa, bir sonraki kaldırılan ikinci öğedir; üçüncüsü daha sonra kaldırılır ve bu böyle devam eder.

Orijinal listenin ilk öğesi kaldırıldıktan sonra, ikincisi ilk öğe olur. İkinci öğe kaldırıldıktan sonra üçüncü öğe birinci öğe olur ve bu böyle devam eder.







Kuyruğa iyi bir gerçek hayattan örnek, insanların hizmet veya ürün beklemek için sıraya girmesidir. İlk kişiye sondan önce servis yapılır. Ancak, bu eğitimde bahsedilen kuyruk, C++'da tasarlandığı şekliyle yazılım kuyruğudur.



FIFO

FIFO, İlk Giren İlk Çıkar anlamına gelir. Kuyruğu takdir etmenin başka bir yoludur. Bu, listeye giren ilk öğenin, kaldırma işlemi gerçekleştirileceği zaman kaldırılacak ilk öğe olduğu anlamına gelir. Listenin başlangıcına baş veya ön denir; Listenin sonuna arka veya kuyruk denir.



Temel İşlemler

Bir yazılım kuyruğunda en azından aşağıdaki işlemler bulunmalıdır:





itmek

Bu işlem, kuyruğun arkasına yeni bir eleman ekler. Bu işlem resmi olarak enqueue olarak adlandırılır.



vardiya

Bu işlem, kuyruğun ilk öğesini kaldırır ve ikinci öğe yeni ilk öğe olur. Bu işleme resmi olarak dequeue denir. C++'da buna pop denir.

Bu makale, C++ kuyruk veri yapısının nasıl kullanılacağını açıklar. Bu makalenin geri kalanını anlamak için C++ işaretçilerini ve referanslarını bilmelisiniz.

Sınıf ve Nesneler

Sınıf, değişkenlerin atanmış değerlerinin olmadığı, birlikte çalışan bir dizi değişken ve işlevdir. Değişkenlere değerler atandığında, sınıf bir nesne haline gelir. Aynı sınıfa verilen farklı değerler farklı nesnelerle sonuçlanır; yani, farklı nesneler, farklı değerlere sahip aynı sınıftır. Bir sınıftan bir nesne yaratmanın, nesneyi somutlaştırmak olduğu söylenir.

İsim, sıra, bir sınıftır. Kuyruk sınıfından oluşturulan bir nesnenin programcı tarafından seçilen bir adı vardır.

Sınıftan bir nesneyi başlatmak için bir sınıfa ait bir fonksiyona ihtiyaç vardır. C++'da bu işlev, sınıfın adıyla aynı ada sahiptir. Sınıftan oluşturulan (örneklenen) nesneler, programcı tarafından kendilerine verilen farklı isimlere sahiptir.

Sınıftan bir nesne oluşturmak, nesneyi oluşturmak anlamına gelir; aynı zamanda somutlaştırmak demektir.

Kuyruk sınıfını kullanan bir C++ programı, dosyanın en üstünde aşağıdaki satırlarla başlar:

#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;

İlk satır giriş/çıkış içindir. İkinci satır, programın kuyruk sınıfının tüm özelliklerini kullanmasına izin vermektir. Üçüncü satır, programın standart ad alanındaki adları kullanmasına izin verir.

Bir Fonksiyonu Aşırı Yüklemek

İki veya daha fazla farklı fonksiyon imzası aynı ada sahip olduğunda, bu ismin aşırı yüklendiği söylenir. Bir işlev çağrıldığında, argümanların sayısı ve türü, gerçekte hangi işlevin yürütüleceğini belirler.

Yapı

sıra<tip>isim()

Aşağıdaki bildirim, int türünde que adlı bir kuyruğu başlatır.

sıra<int>o;

Sıra boş. Bildirim, ayrılmış sözcükle başlar, kuyruk ve ardından veri türüyle birlikte açılı ayraçlar gelir. Ardından, sıra için programcıya verilen ada sahipsiniz.

Başlatıcı Listesi ile Oluşturma

Aşağıdaki tanım, başlatıcı listesiyle bir kuyruğun nasıl oluşturulacağını gösterir:

sıra<batmadan yüzmek>o({1.1, 2.2, 3.3, 4.4});

Bir Kuyruğu Yok Etme

Bir kuyruğu yok etmek için kapsam dışına çıkmasına izin verin.

Kuyruk Öğesi Erişimi

itme(değer)

Sıra, İlk Giren İlk Çıkar listesidir. Böylece, her değer arkadan eklenir. Aşağıdaki kod segmenti boş bir kuyruk oluşturur, ardından arkadan beş kayan nokta değeri eklenir:

sıra<batmadan yüzmek>o;

o.itmek(1.1);
o.itmek(2.2);
o.itmek(3.3);
o.itmek(4.4);
o.itmek(5.5);

boyut() const

Bu, kuyruktaki öğelerin sayısını döndürür. Aşağıdaki kod gösterilmektedir:

sıra<batmadan yüzmek>o;
o.itmek(1.1);o.itmek(2.2);o.itmek(3.3);o.itmek(4.4);o.itmek(5.5);
maliyet<<o.boy() << ' ';

Çıktı 5'tir.

ön()

Bu, öğeyi kaldırmadan sıranın ilk öğesine bir başvuru döndürür. Aşağıdaki kodun çıktısı 1.1'dir.

sıra<batmadan yüzmek>o;
o.itmek(1.1);o.itmek(2.2);o.itmek(3.3);o.itmek(4.4);o.itmek(5.5);
maliyet<<o.ön() << ' ';

Öğe kuyruktan kaldırılmaz.

ön() const

Kuyruk oluşturmadan önce const olduğunda, front() yerine front() const ifadesi yürütülür. Örneğin aşağıdaki kodda kullanılır.

constsıra<batmadan yüzmek>o({1.1, 2.2, 3.3, 4.4, 5.5});
maliyet<<o.ön() << ' ';

Sabit bir başvuru döndürülür. Öğe vektörden kaldırılmaz. Kuyruk öğeleri değiştirilemez.

geri()

Bu, öğeyi kaldırmadan kuyruğun son öğesine bir başvuru döndürür. Aşağıdaki kodun çıktısı 5.5'tir.

sıra<batmadan yüzmek>o;
o.itmek(1.1);o.itmek(2.2);o.itmek(3.3);o.itmek(4.4);o.itmek(5.5);
maliyet<<o.geri() << ' ';

geri() const

Kuyruk oluşturmadan önce const olduğunda, back() yerine const ifadesi çalıştırılır. Örneğin aşağıdaki kodda kullanılır.

constsıra<batmadan yüzmek>o({1.1, 2.2, 3.3, 4.4, 5.5});
maliyet<<o.geri() << ' ';

Sabit bir başvuru döndürülür. Öğe kuyruktan kaldırılmaz. Kuyruk yapısı için önceki const ile kuyruktaki öğeler değiştirilemez.

Kuyruk Kapasitesi

boyut() const

- yukarıyı görmek

boş () sabit

Bu, kuyrukta hiçbir öğe yoksa true için 1 veya kuyruk boşsa false için 0 döndürür. Aşağıdaki kod bunu göstermektedir:

sıra<batmadan yüzmek>bu1({1.1, 2.2, 3.3, 4.4, 5.5});
maliyet<<bu 1.boş() << ' ';
sıra<batmadan yüzmek>bu2;
maliyet<<bu2.boş() << ' ';

Çıktı:

0
1

Kuyruk Değiştiriciler

pop ()

Bir kuyruk FIFO'dur, bu nedenle kaldırılması gereken herhangi bir öğe kuyruğun tepesinden (kafasından) kaldırılmalıdır. Bu üye işlevi, ilk öğeyi döndürmeden kaldırır. Aşağıdaki kod bunu göstermektedir:

sıra<batmadan yüzmek>o({1.1, 2.2, 3.3, 4.4, 5.5});
maliyet<<o.ön() << ' ';
o.pop();
maliyet<<o.boy() << ' ';

Çıktı:

1.1
4

a. takas(b)

Bu kod segmentinde gösterildiği gibi iki kuyruk değiştirilebilir:

sıra<batmadan yüzmek>bu1({1.1, 2.2, 3.3, 4.4, 5.5});
sıra<batmadan yüzmek>bu2({10, yirmi});
bu 1.takas(bu2);
maliyet<< 'que1'in ilk öğesi ve boyutu:
'
<<bu 1.ön() <<','<<bu 1.boy() << ' ';
maliyet<< 'que2'nin ilk öğesi ve boyutu'<<
bu2.ön() <<','<<bu2.boy() << ' ';

Çıktı:

Que1'in ilk öğesi ve boyutu: 10, 2

Que2'nin ilk öğesi ve boyutu: 1.1, 5

Gerekirse kuyruğun uzunluğunun arttığını unutmayın. Ayrıca, değiştirilemeyen değerler bazı varsayılan değerlerle değiştirilir. Veri türleri aynı türden olmalıdır.

Kuyruklar için Eşitlik ve İlişkisel Operatörler

C++'daki sıradan karakterler için, artan sırada sayılar küçük harflerden önce gelen büyük harflerden önce gelir. Boşluk karakteri sıfırdan ve hepsinden önce gelir.

Eşitlik Operatörleri

Doğru için 1, yanlış için 0 döndürür.

== Operatör

İki sıra aynı boyuta sahipse ve karşılık gelen öğeler eşitse 1 döndürür; aksi halde 0 döndürür. Örnek:

sıra<const karakter*>bu1({'tür', 'başka bir şey'});
sıra<const karakter*>bu2({'kötü'});
intbirde=bu1==bu2;
maliyet<<birde<< ' ';

Çıktı: 0.

!= Operatörü

- yukarıdakilerin tersi. Örnek:

sıra<const karakter*>bu1({'tür', 'başka bir şey'});
sıra<const karakter*>bu2({'kötü'});
intbirde=bu1! =bu2;
maliyet<<birde<< ' ';

Çıktı: 1.

İlişkisel Operatörler

Doğru için 1, yanlış için 0 döndürür.

NS

İlk sıra, iki eşit bölümün öğeleri aynı ve aynı sırada olacak şekilde ikinci sıranın ilk alt kümesiyse 1 döndürür. Her iki sıra da aynı boyutta veya farklı boyutlardaysa ve soldan sağa doğru hareket ediyorsa, ilk sırada ikinci sırada karşılık gelen öğeden daha küçük bir öğeyle karşılaşılırsa, yine de 1 döndürülür. Aksi takdirde 0 döndürülür. Örnek:

sıra<const karakter*>bu1({'tür', 'başka bir şey'});
sıra<const karakter*>bu2({'kötü'});
intbirde=bu1<bu2;
maliyet<<birde<< ' ';

Çıktı 1'dir.

> Operatör

- yukarıdakilerin tersi. Örnek:

sıra<const karakter*>bu1({'tür', 'başka bir şey'});
sıra<const karakter*>bu2({'kötü'});
intbirde=bu1>bu2;
maliyet<<birde<< ' ';

Çıkış: 0

NS<= Operator

- ile aynı sıra<const karakter*>bu1({'tür', 'başka bir şey'});
sıra<const karakter*>bu2({'kötü'});
intbirde=bu1<=bu2;
maliyet<<birde<< ' ';

Çıktı: 1

>= Operatör

- yukarıdakilerin tersi. Örnek:

sıra<const karakter*>bu1({'tür', 'başka bir şey'});
sıra<const karakter*>bu2({'kötü'});
intbirde=bu1> =bu2;
maliyet<<birde<< ' ';

Çıkış: 0

Sınıf ve Örneklenmiş Nesneleri

Örneklenmiş bir nesne bir sınıf için olduğu gibi, bir değer de bir veri tipi içindir. Kuyruk yapısı, veri türü olarak bir sınıfı da kabul edebilir. Aşağıdaki program bunu göstermektedir:

#Dahil etmek
#Dahil etmek
ad alanı std kullanarak;
sınıf TheCla
{
halka açık:
intbirde;
statik karakterch;
geçersizişlev(karakternumara, const karakter *P)
{
maliyet<< 'Var ' <<birde<< 'kitapların değeri' <<numara<<P<< ' mağazada.' << ' ';
}
statik geçersizeğlence(karakterch)
{
Eğer (ch== 'ile')
maliyet<< 'Resmi statik üye işlevi' << ' ';
}
};
intana()
{
TheCla nesnesi1;TheCla nesnesi2;TheCla nesnesi3;TheCla nesnesi4;TheCla nesnesi;
sıra<TheCla>o;
o.itmek(nesne1);o.itmek(obj2);o.itmek(obj3);o.itmek(obj4);o.itmek(obj5);
maliyet<<o.boy() << ' ';
dönüş 0;
}

Çıktı 5'tir.

Bağlantılı liste

Kuyruk listesine teknik olarak bağlantılı liste denir. Kuyruk için iki tür bağlantılı liste vardır: tek bağlantılı liste ve çift bağlantılı liste.

Tek bağlantılı bir liste elemanı, iki üyeli bir yapı tarafından uygulanabilir. Bir üye bir sonraki öğeye bir işaretçi tutar ve diğer üye veriyi tutar (veriler için tekil).

Çift bağlantılı bir liste elemanı, üç üyeli bir yapı tarafından uygulanabilir. Orta eleman veriyi tutarken, birinci ve üçüncü üyeler bitişik elemanlarına işaretçiler tutar.

Kuyruk Uygulamaları

Kuyruk, ilk giren ilk çıkar veri yapısıdır. Bilgi işlemde, verilerin bir kuyruk şeklinde geldiğinde, ilk giren ilk çıkar davranışını gerektiren durumlar vardır.

Bilgisayar Kaynaklarını Paylaşma

Bir bilgisayardaki kaynak, sınırlı kullanılabilirliğe sahip herhangi bir fiziksel veya sanal bileşendir. Bunlar CPU, ekran kartı, sabit sürücü ve belleği içerir. Böyle bir kaynağın paylaşılması bir kuyruğa ihtiyaç duyar.

Kesintileri İşleme

Bilgisayar çevre birimlerinin zaman zaman bilgisayarı kesmesi gerekir. Kesintiler, geldikleri şekilde ele alınmalıdır. Bunun için bir sıra gerekiyor.

Bilgileri yönetin.

Kuyruk, örneğin, dosyalar bilgisayarda depolanıyorsa, bir iş için uygulama dosyalarını yönetmek için kullanılabilir.

Çözüm

Sıra, tek bağlantılı bir liste veya çift bağlantılı bir liste olan bir liste veri yapısıdır. Kural olarak, listeye ilk giren eleman, çıkan ilk elemandır. C++, standart kitaplığında bir kuyruk veri yapısı sağlar. Bu yapı için kullanılabilen üye işlevleri ve işleç kategorileri sıra oluşturma, sıra öğesi erişimi, sıra kapasitesi, sıra değiştiriciler ve sıra aşırı yüklenmiş işleçlerdir.

Herhangi bir kuyruk veri yapısı en azından push() ve pop() üye işlevlerini sağlamalıdır. push(), kuyruğun arkasına yeni bir öğe göndermek anlamına gelir; ve pop(), kuyruğun önündeki öğenin kaldırılması anlamına gelir. Ne yazık ki, C++'da bu işlevler, basılan veya atılan değeri döndürmez. Bu nedenle, itmeden önce son öğeyi bilmek için ekstra geri() işlevi kullanılmalıdır; ve patlamadan önce ilk öğeyi bilmek için ekstra front() işlevi kullanılmalıdır.

Örneklenmiş bir nesne bir sınıf için olduğu gibi, bir değer de bir veri tipi içindir. Bu nedenle, belirli bir sınıf, kuyruk şablonu örneklemesi için veri türü olarak kullanılabilir. Sınıf için farklı nesneler, sınıf için farklı değerler gibi olur.

Kuyrukta bilgisayarda uygulamalar var. Örneğin, dosyalar bilgisayarda depolanıyorsa, bir iş için uygulama dosyalarını yönetmek için kullanılabilir.

Chrys