Dairesel Bağlı Liste, Ekleme, Silme (Veri Yapıları 5)

preview_player
Показать описание
Data structures video serisinde circular linked list yapısına ekleme (add) ve silme (delete) işlemlerini C dili üzerinden detaylı olarak anlatıyoruz.
Рекомендации по теме
Комментарии
Автор

Beni hint aksanına kurban gitmekten kurtardığınız için teşekkür ederim hocam :)

musafurkankeskin
Автор

Teşekkürler.

Kod:

#include <stdio.h>
#include <stdlib.h>

struct n{
int x;
struct n * next;
};

typedef struct n node;

void bastir( node * r){
node * iter=r;
printf("%d ", iter->x);
iter = iter -> next;
while (iter != r){
printf("%d ", iter->x);
iter = iter -> next;
}
printf("\n");
}

void ekle( node * r, int x){
node * iter=r;
while( iter -> next != r){
iter =iter -> next;
}
iter->next=( node * ) malloc ( sizeof ( node ) );
iter->next->x=x;
iter->next->next=r;
}

node * ekleSirali ( node * r, int x){
if( r == NULL){
r = (node *) malloc ( sizeof ( node) );
r -> next = r;
r -> x = x;
return r;
}
if(r->x > x){
node * temp = ( node * ) malloc ( sizeof ( node ) );
temp -> x = x;
temp -> next = r;
node * iter=r;
while(iter->next!=r){
iter=iter->next;
}
iter->next=temp;
return temp;
}
node * iter = r;
while( iter -> next != r && iter -> next -> x < x ){
iter = iter -> next;
}

node * temp = (node*)malloc(sizeof(node));
temp->next = iter->next;
iter->next = temp;
temp->x = x;
return r;
}

node * sil(node *r, int x){
node *temp;
node *iter = r;
if( r->x == x){
while(iter->next!=r){
iter=iter->next;
}
iter->next=r->next;
free(r);
return iter->next;
}

while ( iter->next != r && iter->next->x != x){
iter = iter->next;
}
if ( iter->next == r){
printf( "Sayi bulunamadi!\n" );
return r;
}
temp = iter->next;
iter->next = iter->next->next;
free (temp);
return r;
}

int main ()
{
node * root;
root = NULL;
root = ekleSirali( root, 400);
bastir(root);
root = ekleSirali( root, 40);
bastir(root);
root = ekleSirali( root, 4);
bastir(root);
root = ekleSirali( root, 450);
bastir(root);
root = ekleSirali( root, 50);
bastir(root);
root = sil( root, 50);
bastir(root);
root = sil( root, 999);
bastir(root);
root = sil( root, 4);
bastir(root);
root = sil( root, 450);
bastir(root);
}

ahmetcevahircinar
Автор

Bir saniyesini bile heder etmeden izliyorum. Umarım ortalama video izleme süresi artar. Güzel anlatımınız için teşekkürler...

ethembelkasahin
Автор

Hocam siz çok güzel bir insansınız.Teşekkürler emekleriniz için.

tarkbukucu
Автор

Allah razı olsun hocam. Güzel anlatım için.

ozanakdag
Автор

hocam çift yönlü bağlı listede sondan eleman silmenin karmaşıklığı nedir?

burcukalantar
Автор

hocam polinom için her değer geldiğinde büyüklüğüne göre sıralamasını ayarlamasını sağlayabileceğimiz bi algoritma nasıl oluşturabiliriz

necmettinylmaz
Автор

hocam anlatmaya ilk olarak ekle fonksiyonundan başlamanız daha faydalı olurmuş çünkü bastırı anlattığınızda başlangıca dönme algoritmasını henüz anlatmamış oluyorsunuz. açıkçası başta kafam karıştı iter=iter->next 'null'a değil de nasıl 'root'a dönmeyi başardı diye. ve de çok teşekür ediyorum anlatımız ve emeğiniz için <3

ertknozclk
Автор

aşırı karışık ya psikolojim bozuldu. Yine de video için teşekkürler sorun bende büyük ihtimal....

xxnameless
Автор

hocam bu kodları github da bulamadım, internette nerede paylaştınız

BilalTaşkın-pv
Автор

Hocam önceki eğitimde kurduğumuz düğümün next değerinin NULL göstereceğinin garantisi yok demiştik. Fakat bu eğitimde ekleSirali() fonksiyon tanımında sanki NULL gösteriyormuşçasına ilk tanım yaptık. Benim kullandığım gcc derleyicisinde de zaten segmentation fault hatası aldım.

abdurrahmanbaskesen
Автор

hocam ilk elemanı elle bastırmak yerine do while döngüsü kullansak daha iyi olmazmı

atakanhim
Автор

hocam selam. bastir fonskiyonunda while{iter->next != r) deyip while yazsak da olmaz mıydı ?

anpascally
Автор

Video için çok teşekkürler. (15:25) :D

onurcanc
Автор

Hocam merhaba aynı sayıyı iki kez silmeye çalışınca sorun çıkartıyo sayı bulunamadı case ini atlıyor

firatyildirim
Автор

hocam bu kodları sizin gibi anlatan olmasa kendimiz anlamamız çok daha zor ve zaman alıyor, o sorunu nasıl çözebiliriz acaba? çok teşekkürler bu arada anlatımınız için

bayonette
Автор

Silmede r->x==x koşulunda hata yokmu ?(bütün elemanları silmek istedigimiz zaman son elemanı silerken hata veriyor videodaki kod)listede son kalan elemanı silerken iter->next=root->next; free(r); yapıp en son return iter->next; 'i root'u nasıl döndürebiliyor anlamadım hocam?

if(root->x==x)
{

while(iter->next!=root)
{
iter=iter->next;
}

iter->next=root->next;
free(root);

return iter->next;
}

burakbosluk
Автор

hocam kullandığınız programın adı ne acaba ?? keynot falan değil gibi ?

alidemir
Автор

Hocam tum elemanlarin silinmesi durumunda Root/Head i Null a cekme kosulunu atlamissiniz.

omer_usta
Автор

Merhaba hocam, dersler için teşekkürler, bir sorum olacaktı:
sil fonksiyonunu yazarken temp ve iter değişkenlerini malloc ile oluşturmamışsınız. Bildiğim kadarıyla malloc ile oluşturulunca heap'te, diğer türlü stack'de oluşuyor. Esasında "node* iter = r" demek malloc kullanmadan daha pratik, hem free() kullanmak zorunda da kalmıyoruz. Bundan önceki anlatımlarda sürekli malloc kullandığınız için merak ettim. Hangi usulü kullanmalıyız...
Teşekkürler...

merakl