Veri Yapıları ve Örnek C Kodları-3

13 Ocak 2011 Perşembe

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>//toupper için
//veri yapısı tanımlanır
typedef struct topluluk{
    int bilgi;
    char mesaj[100];
    struct topluluk *arka;
}BLISTE;

BLISTE *ilk=NULL,*son=NULL;
BLISTE *ara(int);
BLISTE *sil(int);
BLISTE *oku_klavye();
int ekle(BLISTE *);
void yaz_ekrana(BLISTE *);
int listele();
//***************
main()
{
BLISTE *eklenecek,*ki;
int bilgi,sonuc;
char secim;

 

while(1){
puts("\\nEkleme\\nListeleme\\nArama\\nSilme\\nseciminiz ? \\n\\n cikmak icin [ c ]
[ q ]");
secim=toupper(getche());
switch (secim){
    case ’E’:
        eklenecek=oku_klavye();
        if(eklenecek!=NULL)
        ekle(eklenecek);
        else
        puts("eklemek için bellek dolu\\n ");
        break;
    case ’L’:
        sonuc=listele();
        if(sonuc==-1) puts("\\n liste bos");
        break;
    case ’A’:
        puts("\\n aranan");scanf("%d",&bilgi);
        ki=ara(bilgi);
        if(ki==NULL) puts("\\n aranan bulunamadi");
        else yaz_ekrana(ki);
        break;
    case ’S’:
        puts("\\n siliniecek ");scanf("%d",&bilgi);
        ki=sil(bilgi);
        if(ki!=NULL) puts("\\n silindi");
        else puts("\\n silinmek istenen yok ");
        break;
    case ’C’:
    case ’Q’:
           puts(" hoscakal"); exit(0);
    default :puts("\\n yanlis secim\\n ");
    }

} //while icin

}
//kayit ekleme fonksiyonu
int ekle(BLISTE *ki)
{
    if(ilk!=NULL){
      son->arka=ki;
      son=ki;
      son->arka=NULL;
      }
      else{
      ilk=ki;
      son=ilk;
      ilk->arka=NULL;
      }
return 0;
}
//****************listeleme fonksiyonu*******************************

int listele()
{
    BLISTE *p;//yapı tipinde bi pointer tanımlanıyor
    p=ilk;   //ilk adresi atanıyor
    if(p==NULL)
      return -1;//listede eleman yok
    while(p)//p NULL olana kadar doner
    {
     yaz_ekrana(p);
     p=p->arka;
    }
   return 0;
}

//*****************kayıt arama *********************

BLISTE *ara(int aranan)
{
BLISTE *p;
p=ilk;
while(p){
      if(p->bilgi==aranan)//aranan bu ise adresi donder
        return p;
      p=p->arka;
    }
return NULL;//bulunmadıysa null donder
}
//***************** listede kayıt silme *************************

BLISTE *sil(int silinecek)
{
BLISTE *p,*bironceki=NULL;
p=ilk;
while(p)
{
      if(silinecek==p->bilgi)
      break;
      bironceki=p;
      p=p->arka;
   }
if(p!=NULL)
   {
      if(bironceki==NULL)//silinecek olan birinci düğüm ise
    {
      if(ilk==son)
        {
        ilk=NULL;
        son=NULL;
        }
       else
       ilk=ilk->arka;
     }
      else //silinecek olan arada bir duğum ise
       {
    bironceki->arka=p->arka;
    if(bironceki->arka==NULL)
    son=bironceki;//silinen son düğüm
    }
      free(p);
     return p;
}
else
return NULL;
}

void yaz_ekrana(BLISTE *yazilacak)
{
printf("\\nbilgi=%d, mesaj=%s\\n",yazilacak->bilgi,yazilacak->mesaj);
}

BLISTE *oku_klavye()
{
BLISTE *okunan;
okunan=malloc(sizeof(BLISTE));
if(okunan==NULL)
return NULL;

puts("\\n bilgi giriniz");scanf("%d",&(okunan->bilgi));
puts("\\n mesaj giriniz");scanf("%s",okunan->mesaj);
return okunan;

}



Adınız
Mail
Web Siteniz
Yorumunuz