Hoşgeldin Misafir

C++ Bağlantılı Liste Örnek Kodlama

SurHan

28 Kas 2017
4,186 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
-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--


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