PDA

Tam Sürümünü Görmek İçin : Linked List!!


aktasm
25/11/2005, 00:33
ARKADAŞLAR
linked list ile basit ekleme çıkarma fonkisyonnları içeren programlara ihtiyacım var sizde varsa temin edebilirmiyim yada en temel bu programlara nasıl ulaşabilirim?

ayrıca bende kendim yazmayi denedim fakat ekleme cikarma fonksiyonlarımla sona ekleme basa ekleme yapamıyorum cıkarmayıda maine koymadm ama calismiyor bunları acil olarak duzeltebilecek yardimci olbilrseniz cok sevinirim tesekkurler saygılar herkese..


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


typedef char veriTipi;

typedef struct nodeYapisi{

veriTipi bilgi;

struct nodeYapisi *next;

}Node;

void hata(char *s)
{
printf("%s",s);
}


Node* dugumYap(veriTipi veri)
{
Node* node1;

node1=(Node *)malloc(sizeof(Node));

if(node1==NULL)
hata("Node yapamadim!\n");
else
{
node1->next=NULL;
node1->bilgi=veri;
}
return node1;
}

void basinaEkle(Node** HeadNode,veriTipi veri)
{
Node* node1;

node1=dugumYap(veri);

if(node1==NULL)
hata("dugum yapilamadi!\n");
else
{
node1->next=*HeadNode;
*HeadNode=node1;
}
}

void sonunaEkle(Node** HeadNode,veriTipi veri)
{
Node* node1;
Node* temp;

node1=dugumYap(veri);

if(node1==NULL)
hata("dugum yapilamadi!\n");

else
{
if(*HeadNode==NULL)
{
*HeadNode=node1;
}
else
{
for(temp=*HeadNode;temp->next!=NULL;temp=temp->next);
temp->next=node1;
}
}
}

void tara(Node* HeadNode)
{
Node* temp;
if(HeadNode==NULL)
hata("Liste bos!\n");
else
{
for(temp=HeadNode;temp!=NULL;temp=temp->next)
printf("%c\n",temp->bilgi);
}
}

void arayaEkle(Node* node1,Node* node2)
{
if(node1!=NULL || node2!=NULL)
node2->next=node1->next;
node1->next=node2;
}


int main()
{
veriTipi a,b;
Node *temp;
Node* HeadNode;
a='M';
b='N';
basinaEkle(&HeadNode,a);
basinaEkle(&HeadNode,b);
for(temp=HeadNode;temp!=NULL;temp=temp->next)
printf("%c\n",temp->bilgi);
//sonunaEkle(&HeadNode,a);
//tara(HeadNode);

return 0;
}


aktasm
25/11/2005, 00:46
ARKADAŞLAR
linked list ile basit ekleme çıkarma fonkisyonnları içeren programlara ihtiyacım var sizde varsa temin edebilirmiyim yada en temel bu programlara nasıl ulaşabilirim?

ayrıca bende kendim yazmayi denedim fakat ekleme cikarma fonksiyonlarımla sona ekleme basa ekleme yapamıyorum cıkarmayıda maine koymadm ama calismiyor bunları acil olarak duzeltebilecek yardimci olbilrseniz cok sevinirim tesekkurler saygılar herkese..


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


typedef char veriTipi;

typedef struct nodeYapisi{

veriTipi bilgi;

struct nodeYapisi *next;

}Node;

void hata(char *s)
{
printf("%s",s);
}


Node* dugumYap(veriTipi veri)
{
Node* node1;

node1=(Node *)malloc(sizeof(Node));

if(node1==NULL)
hata("Node yapamadim!\n");
else
{
node1->next=NULL;
node1->bilgi=veri;
}
return node1;
}

void basinaEkle(Node** HeadNode,veriTipi veri)
{
Node* node1;

node1=dugumYap(veri);

if(node1==NULL)
hata("dugum yapilamadi!\n");
else
{
node1->next=*HeadNode;
*HeadNode=node1;
}
}

void sonunaEkle(Node** HeadNode,veriTipi veri)
{
Node* node1;
Node* temp;

node1=dugumYap(veri);

if(node1==NULL)
hata("dugum yapilamadi!\n");

else
{
if(*HeadNode==NULL)
{
*HeadNode=node1;
}
else
{
for(temp=*HeadNode;temp->next!=NULL;temp=temp->next);
temp->next=node1;
}
}
}

void tara(Node* HeadNode)
{
Node* temp;
if(HeadNode==NULL)
hata("Liste bos!\n");
else
{
for(temp=HeadNode;temp!=NULL;temp=temp->next)
printf("%c\n",temp->bilgi);
}
}

void arayaEkle(Node* node1,Node* node2)
{
if(node1!=NULL || node2!=NULL)
node2->next=node1->next;
node1->next=node2;
}



int main()
{
veriTipi a,b;
Node *temp;
Node* HeadNode;
a='M';
b='N';
basinaEkle(&HeadNode,a);
basinaEkle(&HeadNode,b);
for(temp=HeadNode;temp!=NULL;temp=temp->next)
printf("%c\n",temp->bilgi);
//sonunaEkle(&HeadNode,a);
//tara(HeadNode);

return 0;
}
arkadarlar oncelikle mumkunse elemanı direk basa ekleme ve sona eklemeyi cozsek suan icin yeterli..
cikarma araya eklemede nasl yapılıcak onemlı ama asıl eklemeler..

laucian
25/11/2005, 03:42
Rıfat Çölkesenin algoritmalar ve veri yapıları kitabında linked list yapısını anlatan çok güzel örnekleri var..bende o dersi alırken o kitabı kullanmıştım..
Robert Sedgewick'in Algorithms in C kitabında da baya bi şey bulabilirsin..

olmadı ben kitap alamam veya google da arıorum çok fazla örnek çıkıyor, bilgi fazlası içinde boğuluyorum diyorsan, wikipedia.com da güzel bi implementasyonlar vardı

aktasm
30/11/2005, 03:15
void sirala(Node** lptr )
{
Node* tut;
Node** temp;
Node* temp2;
temp=lptr;

while(((*temp)!=NULL) && ((*temp)->next!=NULL))
{
if((*temp)->bilgi > (*temp)->next->bilgi)
{
tut=(*lptr);
temp2=(*temp);
(*temp)=(*temp)->next;
tut->next=(*temp)->next;
(*temp)->next=tut;
temp2->next=(*temp)->next;
}
(*temp)=(*temp)->next;
} temp2=temp2->next;
}




int main()
{
veriTipi a,b,c,k=7,d=9,e=11,f=15;

Node* HeadNode = NULL;

a=8;
b=0;
c=20;

sonunaEkle(&HeadNode,a);
sonunaEkle(&HeadNode,b);
sonunaEkle(&HeadNode,c);
sonunaEkle(&HeadNode,k);
sonunaEkle(&HeadNode,d);
sonunaEkle(&HeadNode,e);
sonunaEkle(&HeadNode,f);
tara(HeadNode);
sirala(&HeadNode);
tara(HeadNode);


return 0;
}

Arkadaslar cok acil olucak ama su kodda elemanlari linked listte siralamasini beklerken bunu yaptiramiyorum eger bakar ve cozum uretebilrseniz sevinirim tesekkurler..