-Bilgisayar Mühendisliği derslerinde C++ ile öğrenciler kod dünyasına giriş yaparlar ve sonra ki yıllarda unutulur. Ama bu dönem içerisinde öğrencilerden ilk istenen ödevlerdenbiri olan ve veri yapıları dersi içeriğinde işlenen bağlantılı liste ile yapılmış bir consol uygulamasıolur. Yapı olarak biraz karışık gibi dursa da mantığını anlayınca, diyagram ve şematik dizaydan sonra kolayca yapılabielcek bir c++ konsol uygulaması.--
-Örneğini verdiğimiz bu konsol uygulamasın da tek yönlü bağlantılı liste yapısı ile ufak bir öğrenci otomasyonu yapılmakta. Öğrencinin adı ve numara bilgisi ile kaydı, arattırma,listeleme ve silme işlemleri gerçekleştirilebiliyor. Bire bir ödeviniz olmayabilir ama kodlar arasında ki açıklamalar ile işinize yarayacağını düşünüyorum…--
-İşte Örnek kodlama--
-Örneğini verdiğimiz bu konsol uygulamasın da tek yönlü bağlantılı liste yapısı ile ufak bir öğrenci otomasyonu yapılmakta. Öğrencinin adı ve numara bilgisi ile kaydı, arattırma,listeleme ve silme işlemleri gerçekleştirilebiliyor. Bire bir ödeviniz olmayabilir ama kodlar arasında ki açıklamalar ile işinize yarayacağını düşünüyorum…--
-İşte Örnek kodlama--
Kod:
#include
#include
#include
//listede düğümlerin veri yapısı tanımlaması
typedef struct topluluk
{
int ogr_no;
char ogr_adsoyad[100];
struct topluluk *bag;
}BLISTE; //BLISTE nin bir veri tipi olduğuna dikkat edelim
//listenin ilk ve son düğümlerini tutan iŞaretçiler
BLISTE *ilk=NULL,*son=NULL;
//fonksiyon bildirimleri
BLISTE *ara(int);
BLISTE *sil(int);
BLISTE *okuklavye();
void yazekrana(BLISTE *);
int ekle(BLISTE *);
int listele();
void menu();
//anaprogram
main()
{
BLISTE *eklenecek,*ki;
int ogr_no, sonuc;
char secim;
char menugoster;
puts("==>TEK YONLU BAGLANTILI LISTE ORNEK UYGULAMA<==\n"); puts("www.selcukoksuz.com & www.facebook.com/TurkiyeninMuhendisleri\n\n"); menu(); while(menugoster=="e") { secim=getchar(); switch (secim) { case 'E or e or 1':eklenecek=okuklavye(); if (eklenecek!=NULL) ekle(eklenecek); else puts("Eklenecek için bellek dolu\n"); menu(); break; case 'L or l or 2': sonuc=listele(); if (sonuc==-1) puts("BoŞ liste!"); menu(); break; case 'A or a or 3': puts("Aranan:"); scanf("%d",&ogr_no); ki=ara(ogr_no); if (ki==NULL) puts("Aranan bulunamadı.."); else yazekrana(ki); menu(); break; case 'S or s or 4': puts("Silinecek:"); scanf("%d",&ogr_no); ki=sil(ogr_no); if (ki!=NULL) puts("Silindi.."); else puts("Silinmek istenen yokkk...!"); menu(); break; case 'ç or Ç or 5': puts("HoŞçakal...!"); exit(0); default : puts("YANLIS SECIM\n"); menu(); }//switch'in } // while d”ngüsünün }// ana programın void menu() { puts("1)Ekle\n2)Listele\n3)Ara\n4)Sil\n5)Cikis\n\n ISLEM="); menugoster = "e"; } //kayıt ekleme fonksiyonu int ekle(BLISTE *ki) { if (ilk!=NULL) { son->bag=ki;
son=ki;
son->bag=NULL;
}
else //ilk kayıt ise bura yurutulur
{
ilk=ki;
son=ilk;
ilk->bag=NULL;
}
return(0);
}
//listedeki kayıtları listeleme
int listele()
{
BLISTE *p;
p=ilk; //listenin baŞlangıç adresi p ye alınıyor
if (p==NULL) return -1; // boŞ liste;
while (p)
{ //null olana kadar d”nülür
yazekrana(p);
p=p->bag;
}
return(0); //listeleme yapıldı anlamında
//liste üzerinde kayıt arama
}
BLISTE *ara(int aranan)
{ BLISTE *p;
p=ilk;
while (p)
{
if (p->ogr_no==aranan) //arananmı
return(p); //evet ise adresini g”ster
p=p->bag; //hayır ise bir sonrakine geç
}
return NULL; //bulunmamıŞ ise null g”ster
}
//listeden bir kayıt silme
BLISTE *sil(int silinecek)
{
BLISTE *p,*bironceki;
p=ilk;
bironceki=NULL;
while(p)
{ //silinecek olan aranıyor
if (silinecek==p->ogr_no) break;
bironceki=p;
p=p->bag;
} //silinecek listede varsa o ve bir onceki bulundu
if (p!=NULL)
{
if (bironceki==NULL)
{ //silinecek olan birinci düğüm
if (ilk==son)
{ //listede yalnızca bir düğüm varsa
ilk=NULL;
son=NULL;
}
else ilk=ilk->bag;
}
else
{ // silinecek olan aradan bir düğüm
bironceki->bag=p->bag;
if (bironceki->bag==NULL) son=bironceki; //silinen son düğüm
}
free(p);//alan serbest bırakılıyor
return p; //NULL dan farklı adres g”nderiliyor
}
else return(NULL); //silinek istenen listede yokkk
}
// bir kayıt bilgisini ekrana yazzar
void yazekrana(BLISTE *yazilacak)
{
printf("Ogrenci No:%d, Ogrenci Isim:%s\n",yazilacak->ogr_no,yazilacak->ogr_adsoyad);
}
//kayit bilgisini klavyeden okur dinamik olaaraak yerleŞtiri
BLISTE *okuklavye()
{
BLISTE *okunan;
okunan=(topluluk *)malloc(sizeof (BLISTE)); //dinamik olarak yer isteniyor
if (okunan==NULL) //boŞ yer verildimi
return(NULL); //boŞ yer yok ise null gelir
puts("Ogrenci No:"); scanf("%d",&(okunan->ogr_no));
puts("Ogrenci Isim"); scanf("%s",okunan->ogr_adsoyad);
return(okunan); //bilginin g”sterildiği adres g”nderiliyor.
}
