Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
veriyapıları dersinde oğuzhan hocanın yazdığı bağlı listeyi bir türlü çalıştıramadım, sorun nerede olabilir sizce?
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
typedef struct node{
int info;
struct node *next;
};
typedef node *NODEPTR;
NODEPTR getnode()
{
NODEPTR p;
p=(NODEPTR)malloc(sizeof(struct node));
return (p);
}
void freenode(NODEPTR p)
{
free(p);
}
void insafter(NODEPTR p,int x)
{
NODEPTR q;
if (p==NULL){
printf("void insertion lost
");
exit(1);
}
q=getnode();
q->info=x;
q->next=p->next;
p->next=q;
}
int main()
{
NODEPTR d;
insafter(d,3);
return 0;
}
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
ascii
öz
Kayıt: 26.07.2006 |
|
düzeltme : hamdikan'ın dediği gibi typedef de hata var.
Windows is a misunderstood Unix.
|
|
Yazar |
|
hamdikan
dünya
Kayıt: 23.01.2006 |
|
naranja yazdi |
typedef struct node{
int info;
struct node *next;
};
typedef node *NODEPTR;
[/code] |
typedef kısımlarında hata var
typedef struct node{
int info;
struct node *next;
}NODE;
typedef NODE *NODEPTR;
yada
struct node{
int info;
struct node *next;
};
typedef struct node *NODEPTR;
yok
|
|
Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
teşekkür ettim ascii, yer ayırmayı unutmuşum
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
carrillof
banlandı
Kayıt: 19.09.2008 |
|
Bir de ilk node için next değerine NULL ataman lazım.
NODEPTR d = getnode();
d->next = NULL;
Bu durumda aslında senin insafter kullandığın sırada 2. node'a değer atanmış olur. Yani insafter gibi bir fonksiyon ile sıfırdan bağlı liste kurulmaz, var olan bir bağlı listenin sonuna eleman eklenir sadece.
|
|
Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
evet hamdi haklısın, ama bu şekilde yazınca da çalışıyor, yani oraya struct yazmayınca problem çıkmıyor. en azından şimdilik
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
carrillof yazdi | Bir de ilk node için next değerine NULL ataman lazım.
NODEPTR d = getnode();
d->next = NULL;
Bu durumda aslında senin insafter kullandığın sırada 2. node'a değer atanmış olur. Yani insafter gibi bir fonksiyon ile sıfırdan bağlı liste kurulmaz, var olan bir bağlı listenin sonuna eleman eklenir sadece. |
teşekkür ederim carrillof, bu bağlı liste olayını henüz tam olarak kavrayamadım, açıkçası ben de bu koda baktıkça bu bağlı liste kodun neresinde diye kendime sormuyor değilim
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
son söylediklerinizi de yaptım ancak anlamadığım bir şey var, son durumda d->info 'nun 3 degerini alması gerekmiyor mu? ben de farklı şeyler yazıyor.
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
typedef struct node{
int info;
struct node *next;
}NODE;
typedef NODE *NODEPTR;
NODEPTR getnode()
{
NODEPTR p;
p=(NODEPTR)malloc(sizeof(struct node));
return (p);
}
void freenode(NODEPTR p)
{
free(p);
}
void insafter(NODEPTR p,int x)
{
NODEPTR q;
if (p==NULL){
printf("void insertion lost");
exit(1);
}
q=getnode();
q->info=x;
q->next=p->next;
p->next=q;
}
int main()
{
NODEPTR d=getnode();
insafter(d,3);
printf("%d",d->info);
system("pause");
return 0;
}
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
ascii
öz
Kayıt: 26.07.2006 |
|
yanlışlık kodda node ekle fonksiyonu yanlış aslında. 3 değer saklamak için 4 node oluşturuyor.
3 4 ve 5 değerleri ekleyince 3 ü ilk noda değil bir sonraki noda ekliyor ve ilk node çöp değer tutuyor.
Windows is a misunderstood Unix.
|
|
Yazar |
|
carrillof
banlandı
Kayıt: 19.09.2008 |
|
naranja yazdi | son söylediklerinizi de yaptım ancak anlamadığım bir şey var, son durumda d->info 'nun 3 degerini alması gerekmiyor mu? ben de farklı şeyler yazıyor. |
carrillof yazdi | Bu durumda aslında senin insafter kullandığın sırada 2. node'a değer atanmış olur. |
printf("%d", d->next->info);
bir de böyle yaz bakalım 3 değeri neredeymiş
|
|
Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
evet d nin next inin info su 3 olmuş. biraz karışık bi yapı, belki de oğuzhan hocanın yazdığı haliyle karışık.
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
peki arkadaşlar,
bi yapıdaki pointer a ulaşırken -> işaretini kullanıyoruz, ancak integer bi değişken için . kullanılmıyor mu, yani d.info olması gerekmiyor mu neden -> kullanmak gerekiyor?
bir diğeri de
q->next=p->next
burada p ve q nun next leri birer pointer, biz bu eşitliği yapınca q->next, p nin next i içerisinde bulunan değeri mi yoksa p nin nextinin adresini mi tutuyor?
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
carrillof
banlandı
Kayıt: 19.09.2008 |
|
yapı aslında çok basit de oğuzhan hocanın elindeki örnekler taş devrinden kalma olduğu için mantığı anlamak kolay olmuyor.
|
|
Yazar |
|
ascii
öz
Kayıt: 26.07.2006 |
|
al kardeş sona eleman ekleyen liste insertion in ilk parametresi bağlı listenin herhangi bir elemanı olsun yeter birde ilk eleman next i NULL olsun.
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include <iostream>
using namespace std;
typedef struct node{
int info;
struct node *next;
}NODE;
typedef NODE *NODEPTR;
NODEPTR getnode()
{
NODEPTR p;
p=(NODEPTR)malloc(sizeof(struct node));
return (p);
}
void freenode(NODEPTR p)
{
free(p);
}
void insafter(NODEPTR p,int x)
{
NODEPTR temp = p;
while(temp->next != NULL)
{
temp = temp->next;
}
if (p==NULL){
printf("void insertion lost");
exit(1);
}
NODEPTR q = getnode();
q->info = x;
q->next = NULL;
temp->next = q;
}
int main()
{
NODEPTR d = getnode();
d->info = 5;
d->next = NULL;
insafter(d,1);
insafter(d,2);
insafter(d,3);
insafter(d,4);
cout << d->info << " " << d->next->info << " " << d->next->next->info <<endl;
return 0;
}
Windows is a misunderstood Unix.
|
|
Yazar |
|
yseraxeratul
DoBriÇ
Kayıt: 05.02.2007 |
|
naranja yazdi | veriyapıları dersinde oğuzhan hocanın yazdığı bağlı listeyi bir türlü çalıştıramadım, sorun nerede olabilir sizce?
|
Oğuzhan Bey bugünkü derste yukarıya yazdığın kodu mu verdi? Integerların listeye klavyeden girilmesi gerekmiyor muydu?
| l | l l l l l | l l l | | l l | l You question your beliefs, your inner thoughts, your whole existence .
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | | | | | | | | | | |