Çift Yönlü Bağlantılı Liste Veri Yapısı Örneği C++

Çift Yönlü Bağlantılı Liste Veri Yapısı Örneği C++

Belirsiz sayıdaki bir öğrenci grubu için çift yönlü bağlantılı liste yapısı oluşturunuz.Listede öğrencilerin adı, numarası, vizesi, finali ve ortalması mecuttur.

a)Listeye eleman ekleyen

b)Adın alfabetik sırasına göre araya ekleyen

c)Listenin ad ve ortalama kısmınıbir diziye aktarıp diziyi ortalaması yüksek olandan düşük olana doğru sıralayan

d)Listeyi görüntüleyen

e)Numaraya göre eleman silen

bir C++ programı yazınız. 

#include < stdio.h >
#include< stdlib.h >
#include< string.h >
struct dllist
{
int no,vize,final;
float gn;
char kelime[20];
struct dllist *on,*arka;

};
struct dllist2
{

float not;
char ad[20];

};

 static dllist *bas,*son;

 void elemanekle(struct dllist *ct)
{

struct dllist *p;

if(bas==NULL)
{
bas=ct;
ct->arka=NULL;
ct->on=NULL;
return;
}
else
for(p=bas;p->arka!=NULL;p=p->arka);
p->arka=ct;
ct->on=p;
ct->arka=NULL;

}

 

void listele()
{
struct dllist *p;
p=bas;int s=0;
do
{
 s++;
printf("%d. eleman \n ad:%s \n",s,p->kelime);
printf(" no: %d \n",p->no);
printf(" vize: %d \n",p->vize);
printf(" final: %d \n",p->final);
printf(" ortalama: %f \n",p->gn);
p=p->arka;

}while(p!=NULL);

}
 

void notsirala()
{
struct dllist *q;
struct dllist2 not[50],noty;
int r=0,i,j;

for(q=bas;q!=NULL;q=q->arka)
{
r++;
strcpy(not[r].ad,q->kelime);
not[r].not=q->gn;
}

for(i=1;i<=r;i++)
for(j=i+1;j<=r;j++)

if(not[i].not

for(i=1;i<=r;i++)
{
printf("%d. eleman\n ad:%s\n",i,not[i].ad);
printf("not:%f",not[i].not);

}
 

void arayaekle(struct dllist *p)
{
struct dllist *q,*once;

 if(bas==NULL)
 {
  bas=p;
p->arka=NULL;
p->on=NULL;
return;
}

for(q=bas;q!=NULL;q=q->arka)

 if(strcmp(p->kelime,q->kelime)==-1)
 {once=q->on;
  break;
 }

 if(q->on!=NULL&&q->arka!=NULL)
 {
 
 p->on=once;
 p->arka=q;
 q->on=p;
 once->arka=p;
 return;
  }

if(q->on==NULL)
 {
 q->on=p;
 p->on=NULL;
 p->arka=q;
 bas=p;return;
 }
 if(q->arka==NULL)
 {
 q->arka=p;
 p->arka=NULL;
 p->on=son;
 son=p;return;
 }
 }

 
void sil(int e)
{
struct dllist *ogr;
for(ogr=bas;ogr->arka==NULL;ogr=ogr->arka)
if(ogr->no==e)
break;
if(ogr->on==NULL)
bas=ogr->arka;
else if(ogr->arka==NULL)
ogr->on->arka=NULL;
else
{
ogr->on->arka=ogr->arka;
ogr->arka->on=ogr->on;
}

 
 

void main()
{
int sec,a;
float ort;
struct dllist *m;
do
{

      printf("\n 1. eleman ekle");
      printf("\n 2. listele");
      printf("\n 3. ada göre sıralı ekle");
    printf("\n 4. ortalamaya göre sırala");
    printf("\n 5. Numaraya göre eleman silme");
 
      printf("\n 6. ‡kŸ");
      printf("\nseciminiz: ");
      scanf("%d", &sec);
   switch(sec)

   {
  
   case 1:
    m=(struct dllist *)malloc(sizeof(dllist));
    printf("ad giriniz: ");
    scanf("%s",&m->kelime);
    printf("no giriniz: ");
    scanf("%d",&m->no);
      printf("vize giriniz: ");
    scanf("%d",&m->vize);
      printf("final giriniz: ");
    scanf("%d",&m->final);
ort=float(0.4*m->vize+0.6*m->final);
    m->gn=ort;
    elemanekle(m);
    break;
   case 2:
    listele();
    break;
  
   case 3:
    m=(struct dllist *)malloc(sizeof(dllist));
    printf("ad giriniz: ");
    scanf("%s",&m->kelime);
    printf("no giriniz: ");
    scanf("%d",&m->no);
      printf("vize giriniz: ");
    scanf("%d",&m->vize);
      printf("final giriniz: ");
    scanf("%d",&m->final);
    ort=float(0.4*m->vize+0.6*m->final);
    m->gn=ort;
    arayaekle(m);
    break;
   case 4:
    notsirala();
    break;
   case 5:
    printf("\nKaydını silmek istediğiniz öğrencinin numarasını giriniz");
    scanf("%d",&a);
   sil(a);
   case 6:exit(0);
  
   }
}while(1);
}


Yorumlar10

ishak YAVUZER demiş ki;
29.04.2013

 programda not diye değişken tanımlanmış, not diye değişken tanımlanamaz.. başka da bi sıkıntı yok.. not kelimesini notu diye değiştirin çalışır... 


Fatih Tit... demiş ki;
23.01.2013

Derleyici kaynaklı bir hata. Öğrenci arkadaşlarımıza yardımcı olsun diye hatayı düzeltip tekrar koyuyorum.

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct dllist
{
int no,vize,final;
float gn;
char kelime[20];
struct dllist *on,*arka;

};
struct dllist2
{

float notu;
char ad[20];

};

 static dllist *bas,*son;

 void elemanekle(struct dllist *ct)
{

struct dllist *p;

if(bas==NULL)
{
bas=ct;
ct->arka=NULL;
ct->on=NULL;
return;
}
else
for(p=bas;p->arka!=NULL;p=p->arka);
p->arka=ct;
ct->on=p;
ct->arka=NULL;

}

 

void listele()
{
struct dllist *p;
p=bas;int s=0;
do
{
 s++;
printf("%d. eleman \n ad:%s \n",s,p->kelime);
printf(" no: %d \n",p->no);
printf(" vize: %d \n",p->vize);
printf(" final: %d \n",p->final);
printf(" ortalama: %f \n",p->gn);
p=p->arka;

}while(p!=NULL);

}
 

void notsirala()
{
struct dllist *q;
struct dllist2 notu[50],noty;
int r=0,i,j;

for(q=bas;q!=NULL;q=q->arka)
{
r++;
strcpy(notu[r].ad,q->kelime);
notu[r].notu=q->gn;
}

for(i=1;i<=r;i++)
for(j=i+1;j<=r;j++)

if(notu[i].notu<notu[j].notu)
{
noty=notu[i];
notu[i]=notu[j];
notu[j]=noty;
}

for(i=1;i<=r;i++)
{
printf("%d. eleman\n ad:%s\n",i,notu[i].ad);
printf("notu:%f",notu[i].notu);

}

}
 

void arayaekle(struct dllist *p)
{
struct dllist *q,*once;

 if(bas==NULL)
 {
  bas=p;
p->arka=NULL;
p->on=NULL;
return;
}

for(q=bas;q!=NULL;q=q->arka)

 if(strcmp(p->kelime,q->kelime)==-1)
 {once=q->on;
  break;
 }

 if(q->on!=NULL&&q->arka!=NULL)
 {
 
 p->on=once;
 p->arka=q;
 q->on=p;
 once->arka=p;
 return;
  }

if(q->on==NULL)
 {
 q->on=p;
 p->on=NULL;
 p->arka=q;
 bas=p;return;
 }
 if(q->arka==NULL)
 {
 q->arka=p;
 p->arka=NULL;
 p->on=son;
 son=p;return;
 }
 }

 
void sil(int e)
{
struct dllist *ogr;
for(ogr=bas;ogr->arka==NULL;ogr=ogr->arka)
if(ogr->no==e)
break;
if(ogr->on==NULL)
bas=ogr->arka;
else if(ogr->arka==NULL)
ogr->on->arka=NULL;
else
{
ogr->on->arka=ogr->arka;
ogr->arka->on=ogr->on;
}
}
 
 

int main()
{
int sec,a;
float ort;
struct dllist *m;
do
{

      printf("\n 1. eleman ekle");
      printf("\n 2. listele");
      printf("\n 3. ada göre sıralı ekle");
    printf("\n 4. ortalamaya göre sırala");
    printf("\n 5. Numaraya göre eleman silme");
 
      printf("\n 6. ‡?k?Ÿ");
      printf("\nseciminiz: ");
      scanf("%d", &sec);
   switch(sec)

   {
 
   case 1:
    m=(struct dllist *)malloc(sizeof(dllist));
    printf("ad giriniz: ");
    scanf("%s",&m->kelime);
    printf("no giriniz: ");
    scanf("%d",&m->no);
      printf("vize giriniz: ");
    scanf("%d",&m->vize);
      printf("final giriniz: ");
    scanf("%d",&m->final);
ort=float(0.4*m->vize+0.6*m->final);
    m->gn=ort;
    elemanekle(m);
    break;
   case 2:
    listele();
    break;
 
   case 3:
    m=(struct dllist *)malloc(sizeof(dllist));
    printf("ad giriniz: ");
    scanf("%s",&m->kelime);
    printf("no giriniz: ");
    scanf("%d",&m->no);
      printf("vize giriniz: ");
    scanf("%d",&m->vize);
      printf("final giriniz: ");
    scanf("%d",&m->final);
    ort=float(0.4*m->vize+0.6*m->final);
    m->gn=ort;
    arayaekle(m);
    break;
   case 4:
    notsirala();
    break;
   case 5:
    printf("\nKaydını silmek istediğiniz öğrencinin numarasını giriniz");
    scanf("%d",&a);
   sil(a);
   case 6:exit(0);
 
   }
}while(1);
}


kodcu baba demiş ki;
10.12.2012

hele o hata yok diyen kim allah için beri gelsin ..  kardeş nasıl  hata yok , her türlü derlemeye çalıştığımda hata veriyor ,  kullandığım derleyici dev c pp  .. siz hangi derleyiciyi kullanıyorsunuz da hata almıyorsunuz ?


dogukan demiş ki;
06.12.2012

bkz. google/C/C++ complier mingw

mingw ile dosya uzantıalrını .cpp ve .hpp(veya .h) olarak bir klasöre kaydedersiniz ve indirdiğiniz mingw derleyici ile derleme işlemini (cmd - dos üzerinden) pekala yapabilirsiniz karşılaşacağınız en ağla problem de makefile dosyası hazırlamak olabilir...

bkz. google/ makefile dosyası oluşturma


efe kaya demiş ki;
29.11.2012

bu kodlari .c uzantili nasil duzenleyip calistirabilirz


Yorumlarınızı Bekliyoruz


Yorum Yazın

Yorum Yapın