#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