#include<stdio.h> #include<stdlib.h> // ************************************* // ************************************* // ************************************* // ****Algoritma Uzmanı***************** // ************************************* // ************************************* // **algoritmauzmani.blogspot.com******* // ************************************* // ************************************* // ************************************* //dugum olusturuyoruz struct node { int data; //düğüm içerisindeki değeri taşıyacak struct node *next; // sonraki düğümü gösteren pointer değeri }; struct node* start = NULL; // başlangıç düğümü için özel start düğümü struct node* temp = NULL; // Elimizdeki değeri tutmak için geçici olarak kullanacağımız düğüm struct node* q = NULL; // Son düğümü bulmak için kullanacağımız düğüm // Bu fonksiyon sayesinde sona düğüm ekliyoruz. void sonaEkle(int veri) { temp = (struct node*)malloc(sizeof(struct node)); // temp düğümü için alan oluşturduk temp->data = veri; // Temp düğümüne fonksiyondan aldığımız data değişkenini atadık temp->next = NULL; // Temp Düğümü sonraki hiçbir düğümü işaret etmeyecek. if(start == NULL) //Eğer Start düğümü NULL ise start = temp; //start düğümüne temp düğümünü atıyoruz. else { // Burası tamamen algoritmauzmanı.com adresinde anlattığımız Linked List Traversal işlemi q = start; while(q->next!=NULL) { q = q->next; } q->next = temp; // Son düğümü buluyoruz, onun next pointerına başta oluşturduğumuz temp değerini atıyoruz. Çünkü bu sona atama işlemi. } } void basaEkle(int veri) { struct node* bas=NULL; bas = (struct node*)malloc(sizeof(struct node)); bas->data = veri; bas->next = start; start = bas; } //Araya Eleman Ekleme Fonksiyonu (aslında düğüm ekleme fonksiyonu) void arayaEkle(int veri, int deger) { struct node* araya = NULL; //araya eklenecek düğümü oluşturduk (struct olarak) araya = (struct node*)malloc(sizeof(struct node)); //araya eklenecek düğüme yer ayırdık araya->data = veri;//fonksiyondan aldığımız veri parametresini girdik struct node* t = NULL;//t diye bir düğüm daha oluşturduk, buna start değerini atayacağız çünkü orjinal start değerini bozmak istemeyiz t=start;//t düğümüne start düğümünü atadık while(t->next->data!=deger)//t->next ifadesi x düğümü ise x->data değeri "deger" parametremize eşit olmadığı sürece döngümüz dönecek { t = t->next; //traverse yapıyoruz } struct node* eskidegerim; // deger sayısına sahip düğümü elimizde tutmak için bu düğümü oluşturdum eskidegerim = t->next; // t->next, önüne ekleyeceğimiz düğümdür t->next = araya; //yeni eklediğimiz sayıyı t->next ifadesine atıyoruz. araya->next = eskidegerim; //eski degeri bir kaydırmış olduk bu ifadeyle. /* 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() { q = start; while(q->next!=NULL) { printf("==>%d", q->data); q = q->next; } printf("=>%d", temp->data); //while döngüsüyle elemanları bastırırken son elemanı basmaz, bu yüzden temp değerini ayrı bastırıyorum. } int main() { int i, adet, deger, deger1, deger2; printf("kac adet bagli liste elemani gireceksiniz?"); //Kullanıcıdan kaç adet değer gireceğini alıyoruz scanf("%d", &adet); for(i=0; i<adet; i++) { printf("\n %d. sayiyi girin .... ", i+1); scanf("%d", °er); sonaEkle(deger); } printf("\n"); yazdir(); printf("\n basa eklemek istediginizi deger?..."); scanf("%d", °er); basaEkle(deger); yazdir(); printf("\n araya eklemek istediginizi deger?..."); scanf("%d", °er1); printf("\n Hangi sayinin onune ekleyeceksiniz?..."); scanf("%d", °er2); arayaEkle(deger1,deger2); yazdir(); printf("\n ***** www.AlgoritmaUzmani.com *******\n"); return 0; }
Etiketler: bağlı liste araya ekleme c kodu, bağlı listeler araya eleman ekleme, linked list araya eleman ekleme, linked list araya eleman ekleme c kodu