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;
 }

Siz de yorum ekleyin

Arşivler
Meta