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;
}
Etiketler :
Veri Yapıları C Ekleme Arama Silme 
Kategoriler :
Programlama