C Programlama Dili Tek Yönlü Kuyruk Yapısı
C Programlama Dili Tek Yönlü Kuyruk Yapısı
C programlama dili tek yönlü kuyruk yapısını örnekle açıklamasını yapacağız. Tek yönlü bağlı liste kullanarak kuyruk yapısını bulabilirsiniz. Kuyruk yapısı dediğimizde aklımıza FIFO (first in first out) gelmesi gerekiyor. İlk giren ilk çıkar yapısı ile kuyruğa ilk giren veri kuyruktan ilk çıkar. En son giren veriyi elde etmek için önündeki tüm verilerin çıkması gerekir. Bu yapı ATM örneğine benzemektedir. ATM’den para çekmek için sıraya girdiğimizde ilk sıradaki işini bitirir ve sıradan çıkar. En sondaki kişi ise önündeki insanların işini bitirmesini bekler ve işini en son o bitir.
Enqueue: Kuyruğa girme.
Dequeue: Kuyruktan ayrılma.
Front: Ön sıradaki (ilk giren).
Back: Arka sıradaki (Son giren).
Örnek:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
#include <stdio.h> #include <stdlib.h> #define limit 200 typedef struct KUYRUK { int sayi; struct KUYRUK *sonraki; } kuyruk; kuyruk *ilk = NULL, *son, *yeni, *sil; void menu(); void ekle(int); void cikar(); void bekle(); void listele(); void ekranTemizle(); int main() { while (1) { menu(); } return 0; } void menu() { int sayi; printf("******Menu******\n"); printf("1)Ekle\n"); printf("2)Cikar\n"); printf("3)Listele\n"); printf("4)Cikis\n"); int secenek; printf("Tercih: "); scanf("%d", &secenek); ekranTemizle(); switch (secenek) { case 1: printf("Sayi giriniz: "); scanf("%d", &sayi); ekle(sayi); break; case 2: cikar(); break; case 3: listele(); break; case 4: printf("Program Sonlandirildi!\n"); exit(0); break; default: printf("Hatali Secim!\n"); } bekle(); } void ekle(int sayi) { yeni = (kuyruk*) malloc(sizeof (kuyruk)); yeni->sayi = sayi; yeni->sonraki = NULL; if (ilk == NULL) { ilk = (kuyruk *) malloc(sizeof (kuyruk)); ilk = yeni; son = ilk; } else { son->sonraki = yeni; son = son->sonraki; } } void cikar() { if (ilk == NULL) { printf("Kuyruk bos\n"); } else { sil = (kuyruk*) malloc(sizeof (kuyruk)); sil = ilk; ilk = ilk->sonraki; printf("%d Kuyruktan cikarildi\n", sil->sayi); free(sil); } } void bekle() { printf("Devam etmek icin Enter'a basiniz!\n"); //klavyeden okuma atlamasinin onune gecmek icin 2 kere yazildi getchar(); getchar(); ekranTemizle(); } void listele() { if (ilk == NULL) { printf("Kuyruk Bos\n"); } else { kuyruk *gecici = ilk; while (gecici != NULL) { printf("%d ", gecici->sayi); gecici = gecici->sonraki; } printf("\n"); } } void ekranTemizle() { //windows icin system("cls"); //linux icin //system("clear"); } |
Çıktılar:
Çıktı 1:
1 2 3 4 5 6 |
******Menu****** 1)Ekle 2)Cikar 3)Listele 4)Cikis Tercih: 1 |
Çıktı 2:
1 2 3 |
Listele: 1 2 3 4 5 Devam etmek icin Enter'a basiniz! |
Çıktı 3:
1 2 3 |
Cikar: 1 Kuyruktan cikarildi Devam etmek icin Enter'a basiniz! |
Çıktı 4:
1 2 |
Cikis: Program Sonlandirildi! |
Örneğimiz de kuyruk adında bir struct yapısı bulunmaktadır. Ayrıca menu, ekle, cikar, bekle, listele ve ekranTemizle fonksiyonları bulunmakta.
Struct yapısı: int tipinde bir sayi almaktadır. Ayrıca sonraki pointer’ı ile başka bir node’u bağlıyoruz.
menu(): Kullanıcıya göstereceğimiz menü ekranını bu fonksiyonda oluşturuyoruz.
ekle(): int tipinde bir parametresi bulunmaktadır. Gönderilen sayı kuyruğa bu fonksiyon ile eklenir.
cikar(): Kuyruk mantığına göre ilk giren sayı ilk çıkar mantığı ile kuyruktan eleman çıkartır.
bekle(): Kullanıcının enter tuşuna basmasını bekleyen özel bekle fonksiyonu.
listele(): Kuyrukta bulunan sayıları ekrana yazar.
ekranTemizle(): Bu fonksiyon ile konsol ekranı temizlenir ve güzel bir kullanım sağlanır. Linux kullanıcıları için yorum satırındaki “clear” parametresi alan yapının kullanılması gerekir!
Leave a reply
Lütfen yorum için giriş yap ve yakayıt ol Teşekkürler .