6
Nis'11

Bağlı Liste İle Sıralı Ekleme (C Programlama Dili)

Dinamik bellek adreslerine girilen kayıtları isme göre sıralı olarak ekleme yapan c kodu:

//BAGLI LISTE

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

void siraliEkle(void);

struct isimKayit{
       char isim[20];
       isimKayit *k_ptr;       
};
isimKayit *ilk, *son, *onceki, *sonraki, *gecici;

main(){
     char chr;
     int girilen=0;

     do{
     printf("\tKAYITLARI SIRALI EKLEYEN PROGRAM\n\n");
     printf("\t\tKAYIT EKLE\n\n");
     printf("%d",girilen+1);
        siraliEkle();
        girilen++;
        if(girilen>=2){
           printf("\nDevam Edilsin Mi? (E/H) : "); chr=getch();
        }
        system("cls");  
     }while(chr == 'e' || chr == 'E' || girilen<=2);

     printf("\t\tSIRALI ISIMLER\n\n");
     gecici = ilk;
     while(gecici != NULL){
           printf("\n\t%s\n",gecici);
           printf("\t-------");
           gecici = gecici->k_ptr;  
     } 
getch();
}

void siraliEkle(void){
     gecici=(isimKayit *) malloc(sizeof(struct isimKayit));
     printf("\nAd Giriniz : "); fflush(stdin); gets(gecici->isim);

     if(ilk->isim == NULL){//ilk isim eklenmesi ise;
        ilk = gecici;
        son = gecici;
        son->k_ptr = NULL;
        onceki = NULL;
        sonraki = NULL;
     }
     else{
           if(strcmp(gecici->isim,ilk->isim)<0){// ilkinden ufaksa;
                   onceki = ilk;
                   ilk = gecici;
                   ilk->k_ptr = onceki;
           }
           if(strcmp(gecici->isim,son->isim)>0){//sondakinden buyukse;
                   onceki = son;                             
                   son = gecici; 
                   son->k_ptr = NULL;
                   onceki->k_ptr = son;                                 
           }
           if((strcmp(gecici->isim,ilk->isim)>0) && (strcmp(gecici->isim,son->isim)<0)){
               onceki=ilk;
               sonraki=ilk->k_ptr;
               while(sonraki != NULL){ 
                   if((strcmp(gecici->isim,onceki->isim)>0) && (strcmp(gecici->isim,sonraki->isim)<0)){
                           //önceki ve sonrakinin arasında ise;  
                           onceki->k_ptr = gecici;
                           gecici->k_ptr = sonraki;
                           break; 
                   }
                   onceki = onceki->k_ptr;
                   sonraki = sonraki->k_ptr;
               }
           }
     }              
}

Yeni makaleleri E-Mail ile takip edin!