Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > c++ linked list
Yazar
naranja


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
20.10.2008-21:49 #51843
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


avatar
öz
Kayıt: 26.07.2006
20.10.2008-22:12 #51844
düzeltme : hamdikan'ın dediği gibi typedef de hata var.





Windows is a misunderstood Unix.


Yazar
hamdikan


avatar
dünya
Kayıt: 23.01.2006
20.10.2008-22:15 #51845
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


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
20.10.2008-22:24 #51846
teşekkür ettim ascii, yer ayırmayı unutmuşum biggrin





Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.






Yazar
carrillof


avatar

banlandı
Kayıt: 19.09.2008
20.10.2008-22:24 #51847
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


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
20.10.2008-22:27 #51848
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 smile





Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.






Yazar
naranja


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
20.10.2008-22:35 #51849
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 biggrin





Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.






Yazar
naranja


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
20.10.2008-22:50 #51850
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


avatar
öz
Kayıt: 26.07.2006
20.10.2008-22:54 #51851
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


avatar

banlandı
Kayıt: 19.09.2008
20.10.2008-23:01 #51852
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ş biggrin







Yazar
naranja


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
20.10.2008-23:09 #51853
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


avatar
Kraliyet Ailesinden
Kayıt: 18.10.2007
20.10.2008-23:19 #51854
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


avatar

banlandı
Kayıt: 19.09.2008
20.10.2008-23:19 #51855
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


avatar
öz
Kayıt: 26.07.2006
20.10.2008-23:19 #51856
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


avatar
DoBriÇ
Kayıt: 05.02.2007
20.10.2008-23:29 #51857
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 .






1 2
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb