program tek yönlü olduğu için ilk operand ve son operand birbirlerine bağlı ve program listeyi dolaşırken ve silme yaparken bu yuvarlak yapıdaki bağlantısı sayesinde işlemleri gerçekleştirebiliyor.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream.h>
typedef struct ogrencibagli_liste{
int no;
char ad[20];
char soyadi[20];
struct ogrencibagli_liste *sonraki;
}bagli_liste;
bagli_liste *ilk=NULL,*son=NULL;
int ekle(bagli_liste *,int);
void listele();
int kayit_sil(int);
void main(){
int ogrno;
bagli_liste *bilgi;
while(1){
char sec;
sec=getchar();
puts("\n a:ekleme\nl:listeleme\ns
ilme\nc:cilis");switch(sec){
case'e':
bilgi=(bagli_liste*)malloc(sizeof(bagli_liste));
puts("\nad\nsoyad\nno giriniz...");
scanf("%s",&bilgi->ad);
scanf("%s",&bilgi->soyadi);
scanf("%d,&bilgi->no");
ekle(bilgi,bilgi->no);
break;
case'l':
if(ilk!=NULL)
{
printf("\ntum kayıtlar bagli listeleniyor");
listele();
}
else printf("\nliste bos");
break;
case's':
if(ilk!=NULL){
printf("ogrencinin tum kaytıtlarını silmek icin silinecek ogrenci no sunu giriniz..\n");
scanf("%d",&ogrno);
kayit_sil(ogrno);
}
else{printf("listede kayıt yok\n");}
break;
case'c':
printf("cikis\n");
exit(1); //break;
}
}
}
int ekle(bagli_liste *bilgi,int sayi){
bagli_liste *search,*sontut;
int araci=0;
if(ilk==NULL){
ilk=bilgi;
son=ilk;
sontut=son;
son->sonraki=ilk;
}
else{
sontut=son;
son->sonraki=bilgi;
son=bilgi;
son->sonraki=ilk;
araci=1;
search=ilk;
if(araci==1){
if(search->no==sayi){
sontut->sonraki=ilk; son=sontut;
printf("ayni numara tekrari\n");
while(search->sonraki!=ilk){
if(sayi==search->no){sontut->sonraki=ilk;
son=sontut;
printf("aynı numara tekrari\n"); return 0;}
search=search->sonraki;}
} return 0;}
void listele(){
bagli_liste *gecici,*bironceki;
int sayac=1;
gecici=ilk;
if(gecici==ilk) {
printf("\n sira\n ogr_no\nogr_isim\nogrenci_soyisim ");
printf("\n %d \n %d \n %s \n %s\n" sayac,gecici->no,gecici->ad,gecici->soyadi);
sayac++;
gecici=gecici->sonraki;}
while(gecici!=ilk){
printf("%d\n%d\n%s\n%s\n",sayac,gecici->no,gecici->soyadi);
sayac++;
gecici=gecici->sonraki;}
printf("tum kayitlar listelendi\n");
}
int kayit_sil(int number){
bagli_liste *bironceki,*gecici,*araci;
if(ilk->no==number){
if(ilk==son){
ilk=NULL;
son=NULL;}
else{
ilk=ilk->sonraki;
son->sonraki=ilk; }
}
araci=ilk;
gecici=ilk->sonraki;
while(gecici!=ilk){ //en az iki kayıt için..
//kayıtlar içinde numara eşit olmadığında
if(gecici->no==number){
if(gecici!=son){
araci->sonraki=gecici->sonraki;
break;}
else{
araci->sonraki=ilk;
son=araci;
son->sonraki=ilk;
break;
}
}
else{
araci=araci->sonraki;
gecici=gecici->sonraki;
}
}
![[Resim: 114ld.jpg]](http://b1112.hizliresim.com/s/c/114ld.jpg)