C programlama dili çift yönlü kuyruk yapısını örnek ile açıklayacağız. Bu kuyruk yapısında çift yönlü bağlı liste kullanılmıştır. C Programlama Dili Tek Yönlü Kuyruk Yapısı isimli konuda kuyrukla ilgili açıklamalar yapılmıştır. Bu konuda farklı olarak yapılar çift yönlü bağlı listeye göre değiştirilmiştir. Aynı yapı bağlı liste yerine kolayca diziler ile de yapılabilir. Ama dinamiklik önemli olduğunda bağlı liste kullanılmalıdır.
C Programlama Dili Çift Yönlü Kuyruk Yapısı
Örnek Kod:
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
|
#include <stdio.h>
#include <stdlib.h>
#define limit 200
typedef struct KUYRUK {
int sayi;
struct KUYRUK *onceki, *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));
yeni->onceki = NULL;
ilk = yeni;
son = ilk;
} else {
son->sonraki = yeni;
yeni->onceki = son;
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 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");
}
void bekle() {
printf("Devam etmek icin Enter'a basiniz!\n");
//klavyeden okuma atlamasinin onune gecmek icin 2 kere yazildi
getchar();
getchar();
ekranTemizle();
}
|
C Programlama Dili Tek Yönlü Kuyruk Yapısı isimli konudaki tüm fonksiyonlar kullanılmıştır. Tek yönlü kuyruk yapısından farklı olarak ekle ve cikar fonksiyonları değiştirilmiştir. Bu fonksiyonlarda onceki pointer’ı sayesinde node’lara önceki node’larda bağlanmıştır. Ayrıca çift yönlü bağlı liste örnek ve açıklamaları için Veri Yapıları – Çift Yönlü Bağlı Liste kategorisini inceleyebilirsiniz.