Tek Yönlü Bağlı Liste Örneği ( Ekleme, Silme, Arama, Listeleme )
Tek Yönlü Bağlı Liste Fonksiyonları ( Ekleme, Silme, Arama, Listeleme )
Evet arkadaşlar bu yazımızda c programlama dili tek yönlü bağlı liste örneği (ekleme, silme, arama, listeleme ) yapacağız. Aslında daha önceki konularda tek yönlü bağlı liste fonksiyonlarını tek tek ekleme,silme vb. olarak paylaşmıştık. Bu kez tek bir kod üzerinde tüm fonksiyonları inceleyeceğiz. Öncelikle daha önce paylaşılan fonksiyonlara bakmak isteyenler olabilir aşağıdaki linklerden konulara ulaşabilirsiniz.
Ekleme Fonksiyonu : C Programlama Dili Tek Yönlü Bağlı Listede Ekleme
Silme Fonksiyonu : C Programlama Dili Tek Yönlü Bağlı Liste Silme Fonksiyonu
Listeleme Fonksiyonu : C Programlama Dili Bağlı Liste Tüm Elemanları Görüntüleme
Arama Fonksiyonu : C Programlama Dili Tek Yönlü Bağlı Listede Arama Yapma
Bu bağlantılardan tek tek fonksiyonlara bakarak da çalışabilirsiniz. Şimdi gelelim asıl konumuza, yani bu ayrı ayrı verdiğimiz fonksiyon kodlarını biraraya getirmeye. Öncelikle her veri yapısı konusunda olduğu gibi bu konuda da ilk olarak struct yapımızı oluşturuyoruz.
1 2 3 4 5 |
typedef struct list { int sayi; struct list *sonraki; } liste; liste *ilk = NULL, *son = NULL, *yeni, *silGecici, *gecici; |
Görüldüğü gibi struct yapımız içerisinde bir tane integer “sayi” değişkeni ve struct list türünde bir pointer değişkeni bulunuyor. Altta ise liste ismini verdiğimiz struct türünden 5 farklı pointer değişkenleri oluşturuyoruz. Aşağıda ise kodumuzu kontrol edelim.
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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
#include<stdio.h> #include<stdlib.h> typedef struct list { int sayi; struct list *sonraki; } liste; liste *ilk = NULL, *son = NULL, *yeni, *silGecici, *gecici; void menu(); void ekle(); void sil(int ); void listele(); void arama(int ); void ekranTemizle(); void bekle(); int main() { while (1) { menu(); } return 0; } void ekle(int veri) { yeni = (liste *) malloc(sizeof (liste)); yeni->sayi = veri; yeni->sonraki = NULL; if (ilk == NULL) { //İlk düğümde eleman olup olmadığını kontrol et. ilk = yeni; son = ilk; } else { //İlk düğümde eleman varsa bu işlemleri yap. son->sonraki = yeni; son = son->sonraki; } } void sil(int veri) { int kontrol = 0; if (ilk->sayi == veri) { silGecici = ilk; ilk = ilk->sonraki; free(silGecici); kontrol = 1; } else { gecici = ilk; while (gecici->sonraki != NULL) { //gecici değişken ile liste üzerinde dolaşım sağlanır. if (gecici->sonraki->sayi == veri) { kontrol = 1; silGecici = gecici->sonraki; //Silinecek düğüm sil adında değişkene atılır. if (silGecici == son) //Silinecek düğüm son düğüm ise "son" un kaybolmaması için bir geriye atanır. son = gecici; gecici->sonraki = silGecici->sonraki; //Liste kaybolmasın diye aradaki bağ düzenlenir. free(silGecici); //Sil düğümü bellekten silinir. break; } gecici = gecici->sonraki; } } if (kontrol == 0) printf("Silmek Istediginiz Eleman Listede Yoktur...\n"); else printf("%d sayisi listeden silinmiştir...\n", veri); } void listele() { gecici = ilk; while (gecici != NULL) { printf("%d\n", gecici->sayi); gecici = gecici->sonraki; } } void arama(int aranan) { int kontrol = 0; gecici = ilk; while (gecici != NULL) { if (aranan == gecici->sayi) { kontrol = 1; } gecici = gecici->sonraki; } if (kontrol == 1) printf("\n%d Sayisi Bulunmustur..\n", aranan); else printf("\nAranan Sayi Bulunamamistir...\n"); } void menu() { int secim, sayi; printf("1-Ekleme\n"); printf("2-Listeleme\n"); printf("3-Arama\n"); printf("4-Silme\n"); printf("5-Cikis\n"); printf("Lutfen Secim Yapiniz --> "); scanf("%d", &secim); switch (secim) { case 1: ekranTemizle(); printf("Sayi Giriniz: "); scanf("%d", &sayi); ekle(sayi); printf("%d sayisi listeye eklendi\n",sayi); bekle(); break; case 2: ekranTemizle(); if (ilk == NULL) { printf("Liste Bostur. Lutfen eleman ekledikten sonra listeleme yapiniz..\n"); bekle(); break; } listele(); bekle(); break; case 3: ekranTemizle(); if (ilk == NULL) { printf("Liste Bostur. Lutfen eleman ekledikten sonra arama yapiniz..\n"); bekle(); break; } printf("Sayi Giriniz: "); scanf("%d", &sayi); arama(sayi); bekle(); break; case 4: ekranTemizle(); if (ilk == NULL) { printf("Liste Bostur. Lutfen eleman ekledikten sonra silme yapiniz..\n"); bekle(); break; } printf("Sayi Giriniz: "); scanf("%d", &sayi); sil(sayi); bekle(); break; case 5: ekranTemizle(); printf("Program Bitti!\n"); exit(0); break; default: ekranTemizle(); printf("Hatali Secim\n"); bekle(); } } void ekranTemizle() { //Windows icin system("cls"); //Linux icin //system("clear"); } void bekle() { char temp; printf("Devam etmek icin Enter'a basiniz!\n"); //klavyeden okuma atlamasinin onune gecmek icin 2 kere yazildi temp = getchar(); temp = getchar(); ekranTemizle(); } |
Ekran Çıktısı 1 :
1 2 3 4 5 6 |
1-Ekleme 2-Listeleme 3-Arama 4-Silme 5-Cikis Lutfen Secim Yapiniz --> |
Ekran Çıktısı 2 :
1 2 3 |
Sayi Giriniz: 12 12 sayisi listeye eklenmistir... Devam etmek icin Enter'a basiniz! |
Ekran Çıktısı 3 :
1 2 3 4 |
Listeleme yapiliyor.. 12 25 Devam etmek icin Enter'a basiniz! |
Ekran Çıktısı 4 :
1 2 |
Liste Bostur. Lutfen eleman ekledikten sonra arama yapiniz.. Devam etmek icin Enter'a basiniz! |
Ekran Çıktısı 5 :
1 2 3 4 |
Aramak istediginiz Sayiyi Giriniz: 65 65 Sayisi Bulunmustur.. Devam etmek icin Enter'a basiniz! |
Ekran Çıktısı 6 :
1 2 3 4 |
Aramak istediginiz Sayiyi Giriniz: 85 Aranan Sayi Bulunamamistir... Devam etmek icin Enter'a basiniz! |
Ekran Çıktısı 7 :
1 2 |
Liste Bostur. Lutfen eleman ekledikten sonra silme yapiniz.. Devam etmek icin Enter'a basiniz! |
Ekran Çıktısı 8 :
1 2 3 |
Silmak istediginiz Sayiyi Giriniz: 22 22 sayisi listeden silinmiştir... Devam etmek icin Enter'a basiniz! |
Ekran Çıktısı 9 :
1 2 3 |
Silmek istediginiz Sayiyi Giriniz: 88 Silmek Istediginiz Eleman Listede Yoktur... Devam etmek icin Enter'a basiniz! |
Ekran Çıktısı 10 :
1 2 3 4 5 |
menüden 5 seçimini yaptığımız da ise ekrana; "Program Bitti!" çıktısını vermektedir. |
Bu şekilde tek yönlü bağlı liste fonksiyonlarımızı bitirmiş oluyoruz. Menüden tüm seçim kombinasyonlarının da ekran çıktıları da yukarıda tek tek verilmiştir. Daha fazla kod örnekleri için bizi takip etmeye devam edin…
Leave a reply
Lütfen yorum için giriş yap ve yakayıt ol Teşekkürler .