Linkedlist örnek C kodu

soon

Hectopat
Katılım
16 Şubat 2021
Mesajlar
542
Çözümler
2
Merhaba, iyi forumlar.
Öncelikle şunu belirteyim işin daha çok başındayım, önerilerinize ve yapıcı eleştirileriniz benim için önemli.
Linkedlist leri öğrenmeye çalıştığım için bir şeyler denedim kontrol eder misiniz, daha az kod kullanarak fakat daha verimli program yazmak için ne yapmam gerek? Kodun gereksiz uzun olduğunun farkındayım dediğim gibi daha yeniyim ve öğrenmeye çalışıyorum. Zaman ayıranlara teşekkür ederim.
[CODE lang="c" highlight="223"]#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*Bir sınıftaki öğrencilerin numarası, adı, vize notu ve final notu bilgilerini tek bağlı
doğrusal listede tutan ve üzerinde çeşitli işlemler yapabilecek bir program yazın.
a) Program bir ana menü ile açılacak. Menüde olacak seçenekler şu şekildedir:
1- Yeni Kayıt Ekleme
2- Kayıt Listeleme
3- Kayıt Güncelleme
4- Kayıt Silme
5- Sınıf Ortalaması Hesapla
6- Ortalamaya Göre En Başarılı Öğrenci Bilgisini Göster*/

struct student {
int no,vize,final;
char name[20];
struct student *next;
};
typedef struct student node;

node *AddNode(node *);
void List(node *);
node * UpdateNode(node *);
node *DeleteNode(node *);
int AverageClass(node *);
node *BestStudent(node *);

node *CreateLinkedList(){
node *iter,*root=NULL;
char name[20];
int kontrol,ogrencisayisi;
printf ("Ogrenci Sayisini Gir:");
scanf("%d",&ogrencisayisi);
printf("%d Ogrenci Icin Sirasiyla Isim-No-Vize-final Bilgileri Girin\n\n",ogrencisayisi);
for (kontrol=1;kontrol<=ogrencisayisi;kontrol++){
if(root==NULL){
root=(node*)malloc(sizeof(node));
iter=root;
printf("%d. ogrencinin bilgileri\n",kontrol);
scanf("%s %d %d %d",iter->name ,&iter->no,&iter->vize,&iter->final);
}
else {
iter->next=(node*)malloc(sizeof(node));
iter=iter->next;
printf("%d. ogrencinin bilgileri\n",kontrol);
scanf("%s %d %d %d",iter->name ,&iter->no,&iter->vize,&iter->final);
}
}
iter->next=NULL;
return root;
}
int main() {
int islem,ortalama;
node *iter, *root,*best;
root=CreateLinkedList();
iter=root;
printf("\n1- Yeni Kayit Ekleme\n2- Kayit Listeleme\n3- Kayit Guncelleme\n4- Kayit Silme\n5- Sinif Ortalamasi Hesapla\n6- Ortalamaya Gore En Basarili Ogrenci Bilgisini Goster\n");
do{
printf("------Secim Yapin, Secim Yapmak Istemiyorsaniz -1 girin-------\n");
scanf("%d",&islem);
switch(islem){
case 1: root=AddNode(root);
iter=root;
break;
case 2: List(root);
break;
case 3: root=UpdateNode(root);
break;
case 4:root=DeleteNode(root);
break;
case 5: ortalama=AverageClass(root);
printf("ortalama:%d\n",ortalama);
break;
case 6: best=BestStudent(root);
printf("Ortalamasi en iyi olan Ogrenci: %s %d %d %d\n",best->name,best->no,best->vize,best->final);
break;
default: printf("Dongu Sonlandi");
break;
}
}while(islem!=-1);
return 0;
}
node *AddNode(node *root){
node *temp;
temp=(node*)malloc(sizeof(node));
printf("Eklenecek Kayit Icin Verileri Girin\n");
scanf("%s %d %d %d",temp->name,&temp->no,&temp->vize,&temp->final);
temp->next=root;
root=temp;
printf("Kayit Ilk Siraya eklendi\n");
return root;
}
void List(node *root){
node *iter=root; int kontrol=0,secim,numara;char name[20];
printf("\n1- Numaraya gore ara\nAranacak ogrenci no girilecek ve uyan kayit varsa tum bilgisi listelenecek.\n2- Isme gore ara\nAranacak Isim girilecek ve uyan kayitlarin hepsi listelenecek.\n3- Basari notu 60 ve uzeri olanlari listele\n Secim Yapin:");
scanf("%d",&secim);
switch(secim){
case 1: printf("Aranacak ogrenci no girilecek:");
scanf("%d",&numara);
while(iter)
{
if (iter->no==numara){
kontrol++;
printf("Aranan ogrencinin bilgileri: %s %d %d %d\n",iter->name,iter->no,iter->vize,iter->final);
iter=iter->next;
}
else iter=iter->next;
}
if(kontrol==0)
printf("Aranan Ogrenciye Ait Veri Bulunamadi\n");
break;
case 2: printf("Aranacak Isim girilecek:");
scanf("%s",name);
while(iter){
if(strcmp(name,iter->name)==0){
printf("Aranan ogrencinin bilgileri: %s %d %d %d\n",iter->name,iter->no,iter->vize,iter->final);
kontrol++;
iter=iter->next;
}
else iter=iter->next;
}
if(kontrol==0)
printf("Aranan Ogrenciye Ait Veri Bulunamadi\n");
break;
case 3: while(iter){
if ((iter->vize+iter->final)/2>=60){
kontrol++;
printf("%s %d %d %d\n",iter->name,iter->no,iter->vize,iter->final);
iter=iter->next;
}
else iter=iter->next;
}
if(kontrol==0)
printf("Basari Notu 60 Ve Uzeri Olan Ogrenci Bulunmuyor\n");
break;
default: printf("Hatali Kayit Aramasi\n");
break;
}
}
node *UpdateNode(node *root){
node *iter=root;
int no,kontrol=0;
printf("Bilgilerini Guncelleyeceginiz Ogrencinin No Girin:");
scanf("%d",&no);
while(kontrol==0){
if(iter->no==no){
kontrol++;
printf("Bilgileri yeniden duzenlemek Icin verileri girin \n");
scanf(" %s %d %d %d",iter->name,&iter->no,&iter->vize,&iter->final);
printf("Guncellenen bilgiler\nname:%s no:%d vize:%d final:%d \n",iter->name,iter->no,iter->vize,iter->final);
iter=iter->next;
}
else
iter=iter->next;
if(iter==NULL)
break;
}
if(kontrol==0)
printf("Aranan Ogrenciye Ait Veri Bulunamadi\n");
else
printf("Guncelleme tamamlandi\n");
return root;
}
node *DeleteNode(node *root){
node *iter=root,*q;
int no,kontrol=0;
printf("Silinecek kayit icin no girin:");
scanf("%d",&no);
while(iter){
if(iter->no==no)
{
if(iter==root){
kontrol++;
root=root->next;
iter=root;
iter=iter->next;
}
else if(iter->next==NULL){
kontrol++;
q->next=NULL;
iter=iter->next;
}
else {
kontrol++;
q->next=iter->next;
iter=iter->next;
}
}
else {
q=iter;
iter=iter->next;
}
}

if(kontrol==0)
printf("Aranan Ogrenciye Ait Veri Bulunamadi\n");
else printf("Kayit Silindi\n");
return root;
}
int AverageClass(node *root){
int kontrol=0,ortalama=0;
node *iter=root;
while(iter){
ortalama+=iter->vize+iter->final;
iter=iter->next;
kontrol+=2;
}
return ortalama/kontrol;
}
node *BestStudent(node *root){
int eb=0;
node *iter=root,*best;
while(iter){
if((iter->vize+iter->final)/2>eb){
eb=(iter->vize+iter->final)/2;
best=iter;
iter=iter->next;
}
else iter=iter->next;
}
return best;
}[/CODE]
 
Son düzenleyen: Moderatör:

Geri
Yukarı