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!
|