![]() |
c ile ilgili bir resim |
#include<stdio.h> #include<stdlib.h> // ************************************* // ************************************* // ************************************* // ****Algoritma Uzmanı***************** // ************************************* // ************************************* // **algoritmauzmani.blogspot.com******* // ************************************* // ************************************* // ************************************* // Linked List Dugumlerimiz asagidaki struct yapisini kullanacaktir struct node { int data; struct node *next; }; // start degeri baslangic dugumu icindir // temp degeri gecici olarak kullanacagimiz dugumler icindir // q start degerini atamak icin sonradan kullanacagim dugumdur struct node* start = NULL; struct node* temp = NULL; struct node* q = NULL; // Linked List elemanlarinin sonuna veri ekler. Gonderilen parametre deger olarak eklenir void sonaEkle(int veri) { //fonksiyona gonderilen verinin tutulacagi dugumu olusturduk. temp = (struct node*)malloc(sizeof(struct node)); temp->data = veri; //sona ekleme islemi yapacagimiz icin NULL verdik temp->next = NULL; //Eger Dugume ilk kez eleman ekliyorsak, ilk ekledigimiz dugum start degeri olur if(start == NULL) start = temp; else { // Linked List Traverse işlemi yapılmış, son düğüm bulunmuştur. Son düğümün önüne yeni düğüm eklenmiştir. q = start; while(q->next!=NULL) { q = q->next; } q->next = temp; } } // Linked List Başa Eleman Ekleme Fonksiyonudur. Gönderilen Veriyi Başa Ekler void basaEkle(int veri) { // Basa eklenecek düğüm için node oluşturduk struct node* bas=NULL; bas = (struct node*)malloc(sizeof(struct node)); bas->data = veri; // Basa Ekleme işleminde ilk eleman ikinci eleman olacaktır. bas->next = start; start = bas; } // Linked List Araya Eleman Ekleme Fonksiyonu 2 parametre alır. // İlk Parametre eklenecek değer. // İkinci Parametre ise hangi değerin önüne ekleneceği bilgisidir. void arayaEkle(int veri, int deger) { //ekleyeceğimiz veri için düğüm oluşturduk struct node* araya = NULL; araya = (struct node*)malloc(sizeof(struct node)); araya->data = veri; struct node* t = NULL; t=start; while(t->next->data!=deger) { t = t->next; } struct node* eskidegerim; eskidegerim = t->next; t->next = araya; araya->next = eskidegerim; /* Daha İyi Anlamanız için **** www.AlgoritmaUzmani.com **** 15 => 29 => 16 => 77 => 81 arayaekle(5,77) 5 sayısı 77'nin önüne eklenecek demektir... Yani şöyle olacak 15 => 29 => 16 => 5 => 77 => 81 araya->data = 5 olur t=start demek, t=15'in tutulduğu düğüm demektir. (15 demek değildir) t->next->data ifadesi, ilk adımda 29'a karşılık gelir, traverse etmeye buradan başlar. Traverse işlemi sonucu 16 sayısının düğümüne gelinir, 77'ye geçilmez, yani t değeri 16'nın tutulduğu düğüm olur eskidegerim değişkeni bu senaryoda 77 değerinin tutulduğu düğümdür t->next değişkenine 5 değerinin tutulduğu düğüm atanır 5 düğümünün işaret ettiği düğüm ise eskidegerim yani 77 olur Lütfen daha fazlasi icin www.algoritmauzmani.com sitesini ziyaret edin */ } //ekrana linked list elemanlarımızı yazdıran fonksiyon void yazdir() { if(start==NULL) printf("\nHenuz hic deger girmemissiniz Lutfen 1 degerini secip, deger giriniz\n"); else { q = start; printf("==>%d", q->data); while(q->next!=NULL) { q = q->next; printf("==>%d", q->data); } printf("\n"); } } // Linked List Sondan Eleman Silen Fonksiyon void sonSil() { struct node* starticin = (struct node*)malloc(sizeof(struct node)); starticin = start; //starticin degeri sondan bir önceki düğüme eşitlenir while(starticin->next->next!=NULL) { starticin = starticin->next; } //Sondan bir önceki düğümün next değeri NULL yapılınca son düğüm listeden çıkarılır starticin->next = NULL; } // Girilen sayıyı siler. Ama unutmayın, sadece aradan silme işlemi yapar. // Eğer ilk veya son veriyi girerseniz program patlar. Kontrol işlemleri eklenmeli! void verileniSil(int verilen) { // Başlangıç değerini tutacağımız node (starticin) // silinecek düğümden bir önceki düğümü tutacak node (prev) // silinecek düğümden bir sonraki düğümü tutacak node (next) struct node* starticin = (struct node*)malloc(sizeof(struct node)); struct node* prev = (struct node*)malloc(sizeof(struct node)); struct node* next = (struct node*)malloc(sizeof(struct node)); starticin = start; //döngü sonucu verilen değerin tutulduğu düğümden bir önceki düğüm starticin değeri haline gelecek while(starticin->next->data!=verilen) { starticin = starticin->next; } prev = starticin; next = starticin->next->next; // Aşağıdaki işlem aradan düğüm çıkartıyor. Bir önceki düğüm artık bir sonraki düğüme işaret ediyor. prev->next = next; // 1 => 3 => 5 3 düğümü çıkarılırsa 1=>5 olur. Yani prev->data 1 && next->data 5 && starticin->next->data 3 } // bu fonksiyon baştan eleman siler void bastanSil() { //ikinci eleman için düğüm oluşturduk struct node* birinciolacak = (struct node*)malloc(sizeof(struct node)); //oluşturduğumuz düğüme start->next değerini atadık. Bu durumda artık ikinci düğüm oldu birinciolacak = start->next; //start düğümünün kapladığı alanı hafızadan sildik free(start); //artık start değeri ikinci düğüm oldu. eski ilk değer listeden çıkarıldı. start = birinciolacak; } //bu fonksiyon sitede ilgili konuya gidebilmeniz icin yazıldı... void algoritmaUzmani(); // menü için ayrı fonksiyon yazdım. Switch case biliyorsunuz diye umuyorum. void menu() { int secim,deger; while(1==1) { printf("\n *************** Algoritma Uzmani *****************"); printf("\n ************www.Algoritma Uzmani.com**************"); printf("\nYapmak istediginiz islemi secin\n"); printf("\n1- linked liste eleman ekle(sona eleman ekle\n"); printf("\n2- linked list basa eleman ekle\n"); printf("\n3- linked list araya eleman ekle\n"); printf("\n4- linked list sondan eleman sil(sona eleman ekle\n"); printf("\n5- linked list aradan eleman sil\n"); printf("\n6- linked list bastan eleman sil\n");; printf("\n7- Konuya Git\n"); yazdir(); scanf("%d", &secim); switch(secim) { case 1: printf("\nHangi sayiyi eklemek istiyorsunuz? ..."); scanf("%d", &secim); sonaEkle(secim); break; case 2: printf("\nHangi sayiyi eklemek istiyorsunuz? (basa) ..."); scanf("%d", &secim); basaEkle(secim); break; case 3: printf("\nHangi sayiyi eklemek istiyorsunuz? (araya) ..."); scanf("%d", &secim); printf("\nHangi sayinin onune eklemek istiyorsunuz? (araya) ..."); scanf("%d", °er); arayaEkle(secim,deger); break; case 4: sonSil(); yazdir(); break; case 5: printf("\nHangi sayiyi silmek istiyorsunuz? ..."); scanf("%d", &secim); verileniSil(secim); break; case 6: bastanSil(); break; case 7: algoritmaUzmani(); break; } } } // main fonksiyonunda yalnızca menu fonksiyonunu çağırdım. Gerisini menu fonksiyonu hallediyor zaten. int main() { menu(); return 0; } //sadece ilgili konuya erişim fonksiyonu. diger kodlar ile ilgisi yok void algoritmaUzmani() { system("C:\\Progra~2\\Google\\Chrome\\Application\\chrome.exe http://www.algoritmauzmani.com/2016/09/linked-list-islemleri.html"); printf("\n Eger asagida sistem yolu hatasi aliyorsaniz bunu onemsemeyin"); if(system) { system("C:\\Progra~1\\Google\\Chrome\\Application\\chrome.exe http://www.algoritmauzmani.com/2016/09/linked-list-islemleri.html"); if(system) system("C:\\Progra~2\\Mozill~1\\firefox.exe http://www.algoritmauzmani.com/2016/09/linked-list-islemleri.html"); if(system) system("C:\\Progra~1\\Mozill~1\\firefox.exe http://www.algoritmauzmani.com/2016/09/linked-list-islemleri.html"); } }
Etiketler: bağlı liste c kodu, bağlı liste hazır c kodu, linked list c kodu, linked list hazır c kodu