Bağlı listeler genelde dinamik yapılar kullanılarak gerçeklenir ancak bu örnekte kolay anlaşılır olması açısından dizi gösterimi kullanılmıştır.
Kaynak Kodlar:
#include <stdio.h>
#include <stdlib.h>
#define N 50
int A[N];
int link[N];
int lastIndex=0;
void insertToList(int data){
int prev,adr;
if(lastIndex+1>=N){
printf("\nArray kapasitesi yetersiz.\n");
return;
}
A[lastIndex+1]=data;
prev=0;
adr=link[0];
while(adr!=-1 && A[adr]<data){
prev=adr;
adr=link[adr];
}
link[prev]=lastIndex+1;
link[lastIndex+1]=adr;
lastIndex++;
}
void printList(){
int adr=link[0];
while(adr!=-1){
printf("[%d | %d] -> ",A[adr],adr);
adr=link[adr];
}
printf("\n");
}
void buildList(int numOfElements){
int i;
int temp;
printf("\nnumOfElements: %d\n",numOfElements);
if(numOfElements>=N){
printf("Yeterli yer ayrilmamis.\n");
return;
}
for(i=0;i<numOfElements;i++){
printf("\nBir eleman girin: ");
scanf("%d",&temp);
insertToList(temp);
printList();
}
}
void searchInList(int key){
int adr=link[0];
while(adr!=-1 && A[adr]!=key){
adr=link[adr];
}
if(adr==-1) printf("\n%d Bulunamadi\n",key);
else printf("\n%d %d. adreste bulundu\n",key,adr);
}
void deleteFromList(int deleted){
int prev=0,adr=link[prev];
while(adr!=-1 && deleted!=A[adr]){
prev=adr;
adr=link[adr];
}
if(adr==-1) printf("\n%d Bulunamadi\n",deleted);
else{
link[prev]=link[adr];
printf("\n%d silindi\n",deleted);
printList();
}
}
int main(){
int numOfElements,key;
int temp;
link[0]=-1;
printf("\nEklenecek eleman sayisi: ");
scanf("%d",&numOfElements);
buildList(numOfElements);
printList();
while(1){
printf("\n1.Listede ara\n2.Yeni Eleman Gir\n3.Listeden Sil\n4.Listeyi Yazdir\n5.Cikis\n");
scanf("%d",&key);
switch(key){
case 1:
printf("Eleman: "); scanf("%d",&temp);
searchInList(temp);
break;
case 2:
printf("Eleman: "); scanf("%d",&temp);
insertToList(temp);
printList();
break;
case 3:
printf("Eleman: "); scanf("%d",&temp);
deleteFromList(temp);
break;
case 4:
printList();
break;
case 5:
return 0;
}
}
return 0;
}





