C Programlama Dili Tek Yönlü Bağlı Liste Sıralı Ekleme Örneği
C Programlama Dili Tek Yönlü Bağlı Liste Sıralı Ekleme Örneği
C programlama dili tek yönlü bağlı liste sıralı ekleme örneği kodunda sıralı ekleme, arama, silme, listeleme ve menü fonksiyonlarını bulabilirsiniz. Tek yönlü bağlı listede sona ekleme kodunu da Tek yönlü bağlı listede sona ekleme örneği başlıklı konuda bulabilirsiniz.
- Sıralı ekleme işleminde 4 koşulu kontrol etmek gerekir.
- Liste boş ise,
- Girilen sayı ilk elemandan küçük ise,
- Araya ekleme,
- Girilen sayı son elemandan büyük ise.
- Yukardaki şartları aşağıdaki ekle fonksiyonunda bulabilirsiniz.
Ö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 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 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
/* * File: main.c * Author: cemserit * * Created on October 23, 2016, 5:43 AM */ #include <stdio.h> #include <stdlib.h> typedef struct list { int veri; struct list *sonraki; } liste; liste *yeni, *ilk = NULL, *gecici, *silGecici; void menu(); void ekle(int); void listele(); void bekle(); int ara(int); int sil(int); void ekranTemizle(); int main() { while (1) { ekranTemizle(); menu(); } return 0; } void ekle(int sayi) { //Liste bos ise if (ilk == NULL) { ilk = (liste*) malloc(sizeof (liste)); ilk->veri = sayi; ilk->sonraki = NULL; } else { //Girilen sayi ilk sayidan kucuk ise if ((ilk->veri) > (sayi)) { yeni = (liste*) malloc(sizeof (liste)); yeni->veri = sayi; yeni->sonraki = ilk; ilk = yeni; } else { gecici = ilk; yeni = (liste*) malloc(sizeof (liste)); yeni->veri = sayi; while (gecici != NULL) { //gecici elemaninin sonraki null ise ve son elemandan buyukse if (gecici->sonraki == NULL && (gecici->veri) <= (sayi)) { yeni->sonraki = NULL; gecici->sonraki = yeni; break; } //Araya Ekleme if ((gecici->sonraki->veri) > (sayi)) { yeni->sonraki = gecici->sonraki; gecici->sonraki = yeni; break; } gecici = gecici->sonraki; } } } } void listele() { //liste bos ise if (ilk == NULL) { printf("Liste Bos\n"); } else { //ilk degeri kaybetmemek icin gecici kullanildi gecici = ilk; while (gecici != NULL) { printf("%d\n", gecici->veri); gecici = gecici->sonraki; } } bekle(); } void menu() { int secim, sayi, sira, kontrol; printf("1-Ekleme\n"); printf("2-Listeleme\n"); printf("3-Arama\n"); printf("4-Silme\n"); printf("5-Cikis\n"); scanf("%d", &secim); switch (secim) { case 1: ekranTemizle(); printf("Sayi Giriniz: "); scanf("%d", &sayi); ekle(sayi); bekle(); break; case 2: ekranTemizle(); listele(); break; case 3: ekranTemizle(); if (ilk == NULL) { printf("Liste Bos!\n"); bekle(); break; } printf("Sayi Giriniz: "); scanf("%d", &sayi); sira = ara(sayi); if (sira == -1) printf("Girilen sayi bulunamadı!\n"); else printf("%d sayisi listenin %d. sirasinda\n", sayi, sira); bekle(); break; case 4: ekranTemizle(); if(ilk == NULL){ printf("Liste Bos!\n"); bekle(); break; } printf("Sayi Giriniz: "); scanf("%d", &sayi); kontrol = sil(sayi); if (kontrol == -1) printf("Liste Bos!\n"); else if (kontrol == 0) printf("%d listede bulunamadi!\n", sayi); else printf("%d silindi\n", sayi); bekle(); break; case 5: ekranTemizle(); printf("Program Bitti!\n"); exit(0); break; default: ekranTemizle(); printf("Hatali Secim\n"); bekle(); } } int ara(int sayi) { int sayac = 0; gecici = ilk; while (gecici != NULL) { sayac++; if (gecici->veri == sayi) return sayac; gecici = gecici->sonraki; } return -1; } int sil(int sayi) { if (ilk == NULL) return -1; else if (ilk->veri == sayi) { silGecici = ilk; ilk = ilk->sonraki; free(silGecici); return 1; } else { gecici = ilk; while (gecici->sonraki != NULL) { if (gecici->sonraki->veri == sayi) { silGecici = gecici->sonraki; gecici->sonraki = silGecici->sonraki; free(silGecici); return 1; } gecici = gecici->sonraki; } } return 0; } //Kendi Yazdigimiz Ozel bekleme fonksiyonu 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(); } //Ekrani temizleme fonksiyonu //Not: windows icin "cls" linux icin "clear" void ekranTemizle() { //Windows icin system("cls"); //Linux icin //system("clear"); } |
Çıktılar:
Çıktı 1:
1 2 3 4 5 6 |
Menü: 1-Ekleme 2-Listeleme 3-Arama 4-Silme 5-Cikis |
Çıktı 2:
1 2 3 |
Ekle: Sayi Giriniz: 44 Devam etmek icin Enter'a basiniz! |
Çıktı 3:
1 2 3 4 5 |
Listele: 23 33 44 Devam etmek icin Enter'a basiniz! |
Çıktı 4:
1 2 3 4 |
Arama: Sayi Giriniz: 33 33 sayisi listenin 2. sirasinda Devam etmek icin Enter'a basiniz! |
Çıktı 5:
1 2 3 4 |
Silme: Sayi Giriniz: 4 4 listede bulunamadi! Devam etmek icin Enter'a basiniz! |
Çıktı 6:
1 2 3 4 |
Silme: Sayi Giriniz: 44 44 silindi Devam etmek icin Enter'a basiniz! |
Çıktı 7:
1 2 |
Çıkış: Program Bitti! |
Leave a reply
Lütfen yorum için giriş yap ve yakayıt ol Teşekkürler .