Konuyu görüntüle
IUCODERS FORUM > Duyurular > Okul ile ilgili > veri yapıları but
Yazar
audtou


avatar
malatya
Kayıt: 31.08.2006
12.02.2008-16:40 #37797
ataryemez yazdi
 
ya arkadaşlar bilen biri yardımcı olabilir mi o çoklu ağacı ikili ağaca nasıl dönüştürüyoruz? Anlamadım gitti bi türlü neyi baz alcaz orda?

benim anladıgım şöyle:kök düğümün en solundaki alt düğümü kök düğümün soluna yerleştiriyoruz onun kardeşlerinide alt düğümün sağına yerleştiriyoruz.







bitiyo lan!
Yazar
ataryemez


avatar
Ankara
Kayıt: 18.06.2007
12.02.2008-17:16 #37807
emin misin peki.ve diyelim en soldakini çektik.onun yanında iki tane daha sayı var.sadaki iki elemanı neye göre sıralıyoruz biri bana örnekle anlatsın lütfen bi o noktayı anlasam





every man dies, not every man really lives










Yazar
audtou


avatar
malatya
Kayıt: 31.08.2006
12.02.2008-17:23 #37810
ataryemez yazdi
 
emin misin peki.ve diyelim en soldakini çektik.onun yanında iki tane daha sayı var.sadaki iki elemanı neye göre sıralıyoruz biri bana örnekle anlatsın lütfen bi o noktayı anlasam

elimde 1 tane örnek var ondada harfler var yani büyüklük küçüklük sıralaması yapılamıyo onun için kalan 2 taneyide çektigin düğümün sağına yerleştiriyosun.
ancak tam emin degilim onu soyliyim
hatalysam düzeltin





bitiyo lan!
Yazar
audtou


avatar
malatya
Kayıt: 31.08.2006
12.02.2008-17:28 #37813
sınav sorusu şöyle olabilir
c nin soluna b
b nin sagına a
a nın sağına d
a nın soluna f
f nin sağına I
I nın sağına g
d nin soluna h
h nin sağına e
e nin soluna j
j nin sagına k





bitiyo lan!
Yazar
antirunje


avatar

Kayıt: 16.11.2006
12.02.2008-17:29 #37814
Arkadaşlar vizenin 5. sorusunu yapabilen var mı acaba? (Hafızada önceden oluşturulmuş bir graf üzerindeki herhangi iki düğüm arasında bir yol olup olmadığını bulan C program rutini)





Eger ac ve kimsesiz bir kopegi alip bakar ve rahata kavusturursaniz sizi isirmaz. Insan ve kopek arasindaki temel fark budur.






Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
12.02.2008-18:27 #37826
antirunje yazdi
 
Arkadaşlar vizenin 5. sorusunu yapabilen var mı acaba? (Hafızada önceden oluşturulmuş bir graf üzerindeki herhangi iki düğüm arasında bir yol olup olmadığını bulan C program rutini)


graf sorusu yok die biliyorum..





Yazar
antirunje


avatar

Kayıt: 16.11.2006
12.02.2008-18:56 #37828
akgulozkan yazdi
 
antirunje yazdi
 
Arkadaşlar vizenin 5. sorusunu yapabilen var mı acaba? (Hafızada önceden oluşturulmuş bir graf üzerindeki herhangi iki düğüm arasında bir yol olup olmadığını bulan C program rutini)


graf sorusu yok die biliyorum..

Dikkat etmemişim, çok teşekkür ederim.applause





Eger ac ve kimsesiz bir kopegi alip bakar ve rahata kavusturursaniz sizi isirmaz. Insan ve kopek arasindaki temel fark budur.






Yazar
altuko


avatar

banlandı
Kayıt: 05.02.2006
12.02.2008-21:21 #37845
indigestible yazdi
 
2li ağaçtan tek bağlıya
çift bağlıdan tek bağlıya
tek bağlıdan çift bağlıya(vize)
önceden oluşturulan kuyruktaki elemanları 2li ağaca yerleştiren(vize)

bu programlar elinde olan vea yapabilen war mıı??


Ağaçtan tek bağlıya,ama sıralı yapmadım...

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

struct ListNode 
{   
   int data;
   struct ListNode *nextPtr;
};

typedef struct ListNode ListNode;
typedef ListNode *ListNodePtr;

struct treeNode { 
   struct treeNode *leftPtr;
   int data;
   struct treeNode *rightPtr;
};

typedef struct treeNode TreeNode;
typedef TreeNode *TreeNodePtr;

void insertTree(TreeNodePtr *treePtr,int data)
{
	if((*treePtr == NULL))
	{
		(*treePtr) = (TreeNodePtr)malloc(sizeof(TreeNode));
		(*treePtr)->data = data;
		(*treePtr)->leftPtr = NULL;
		(*treePtr)->rightPtr = NULL;
	}
	else
	{
		if((data > (*treePtr)->data))
			insertTree(&((*treePtr)->rightPtr),data);
		else
			insertTree(&((*treePtr)->leftPtr),data);
	}
	
	
}

void insertListNode(ListNodePtr *startPtr,int data)
{
	if((*startPtr) == NULL)
	{
		(*startPtr) = (ListNodePtr)malloc(sizeof(ListNode));
		(*startPtr)->data = data;
		(*startPtr)->nextPtr = NULL;
	}
	else
		insertListNode(&((*startPtr)->nextPtr),data);
}

void printTree(TreeNodePtr treePtr)
{
	if(treePtr != NULL)
	{
		printf("%d->",treePtr->data);
		printTree(treePtr->leftPtr);
		printTree(treePtr->rightPtr);
	}
}

void treeToList(TreeNodePtr treePtr,ListNodePtr *startPtr)
{
	if(treePtr != NULL)
	{
		insertListNode(startPtr,treePtr->data);
		treeToList(treePtr->leftPtr,startPtr);
		treeToList(treePtr->rightPtr,startPtr);
	}

}
void printList(ListNodePtr listPtr)
{
	if(listPtr != NULL)
	{
		printf("%d->",listPtr->data);
		printList(listPtr->nextPtr);
	}
}
int main()
{
	TreeNodePtr kokPtr = NULL;
	ListNodePtr startPtr = NULL;
	int kayitSayisi;
	int eleman;

	printf("Kayit sayisini giriniz....
");
	scanf("%d",&kayitSayisi);
	flushall();
	for(int i=0;i<kayitSayisi;i++)
	{

		printf("%d->eleman
",i+1);
		scanf("%d",&eleman);
		flushall();
		insertTree(&kokPtr,eleman);
	}
	printTree(kokPtr);
	printf("NULL");
	printf("
*************************
");
	treeToList(kokPtr,&startPtr);
	printList(startPtr);
	printf("NULL");
	printf("
");
	return 0;
	

}
	


		






Yazar
altuko


avatar

banlandı
Kayıt: 05.02.2006
12.02.2008-21:24 #37846
indigestible yazdi
 
2li ağaçtan tek bağlıya
çift bağlıdan tek bağlıya
tek bağlıdan çift bağlıya(vize)
önceden oluşturulan kuyruktaki elemanları 2li ağaca yerleştiren(vize)

bu programlar elinde olan vea yapabilen war mıı??


Tek bağlıdan çift bağlıya......
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct TekBagli
{
	char name[20];
	struct TekBagli *next;
};
struct CiftBagli
{
	char name[20];
	struct CiftBagli *next;
	struct CiftBagli *before;
};

typedef struct TekBagli Tekbagli;
typedef struct TekBagli* TekBagliPtr;
typedef struct CiftBagli CiftBagli;
typedef struct CiftBagli* CiftBagliPtr;

void insertTekBagli(TekBagliPtr *tekStart,char *Tname)
{
	if((*tekStart) == NULL)
	{
		(*tekStart) = (TekBagliPtr)malloc(sizeof(TekBagli));
		strcpy((*tekStart)->name,Tname);
		(*tekStart)->next = NULL;
	}
	else
		insertTekBagli(&((*tekStart)->next),Tname);
}
void printTekBagli(TekBagliPtr tekStart)
{
	if(tekStart != NULL)
	{
		printf("%s->",tekStart->name);
		printTekBagli(tekStart->next);
	}
}
void printCiftBagli(CiftBagliPtr ciftStart)
{
	if(ciftStart != NULL)
	{
		printf("%s->",ciftStart->name);
		printCiftBagli(ciftStart->next);
	}
}
void insertCiftBagli(CiftBagliPtr *ciftStart,char *Cname)
{
	CiftBagliPtr currentPtr,previousPtr,newPtr;

	newPtr = (CiftBagliPtr)malloc(sizeof(CiftBagli));
	strcpy(newPtr->name,Cname);
	currentPtr = (*ciftStart);
	previousPtr = NULL;

	while(currentPtr != NULL &&(strcmp(currentPtr->name,Cname) < 0) )
	{
		previousPtr = currentPtr;
		currentPtr = currentPtr->next;
		
	}

	if(previousPtr == NULL)
	{
		(*ciftStart) = newPtr;
		newPtr->next = currentPtr;
		newPtr->before = NULL;
	}
	else
	{
		previousPtr->next = newPtr;
		newPtr->before = previousPtr;
		newPtr->next = currentPtr;
		if(currentPtr != NULL)
			currentPtr->before = newPtr;
	}
}

void tekToCift(TekBagliPtr *tekStart,CiftBagliPtr *ciftStart)
{
	TekBagliPtr currentPtr,temp;
	char name[20];

	currentPtr = (*tekStart);
	while(currentPtr != NULL)
	{
		strcpy(name,currentPtr->name);
		insertCiftBagli(ciftStart,name);
		temp = currentPtr;
		currentPtr = currentPtr->next;
		free(temp);
	}
}
		


	
		



int main()
{
	TekBagliPtr tekStart = NULL;//tek bağlı listenin başlangıç adresi...
	CiftBagliPtr ciftStart = NULL;
	int kayitSayisi;
	char ad[20];

	printf("Kac tane kayit girmek istiyorsunuz....
");
	scanf("%d",&kayitSayisi);
	flushall();
	for(int i = 0;i < kayitSayisi;i++)
	{
		printf("%d-->isim..
",i+1);
		gets(ad);
		flushall();
		insertTekBagli(&tekStart,ad);
	}
	printf("
***************************
");
	printTekBagli(tekStart);
	printf("NULL");
	printf("
****************************
");
	tekToCift(&tekStart,&ciftStart);
//	printTekBagli(tekStart);
	printf("
****************************
");
	printCiftBagli(ciftStart);
	printf("NULL");



	return 0;

}








Yazar
indigestible


avatar

Kayıt: 27.01.2007
12.02.2008-21:49 #37851

ya çok saoool walla..süpersin..
çok olcam ama 1şi daa rica etsem..
2li ağaçtan çift bağlıa nası oluo??


altuko yazdi
 
indigestible yazdi
 
2li ağaçtan tek bağlıya
çift bağlıdan tek bağlıya
tek bağlıdan çift bağlıya(vize)
önceden oluşturulan kuyruktaki elemanları 2li ağaca yerleştiren(vize)

bu programlar elinde olan vea yapabilen war mıı??


Tek bağlıdan çift bağlıya......
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct TekBagli
{
	char name[20];
	struct TekBagli *next;
};
struct CiftBagli
{
	char name[20];
	struct CiftBagli *next;
	struct CiftBagli *before;
};

typedef struct TekBagli Tekbagli;
typedef struct TekBagli* TekBagliPtr;
typedef struct CiftBagli CiftBagli;
typedef struct CiftBagli* CiftBagliPtr;

void insertTekBagli(TekBagliPtr *tekStart,char *Tname)
{
	if((*tekStart) == NULL)
	{
		(*tekStart) = (TekBagliPtr)malloc(sizeof(TekBagli));
		strcpy((*tekStart)->name,Tname);
		(*tekStart)->next = NULL;
	}
	else
		insertTekBagli(&((*tekStart)->next),Tname);
}
void printTekBagli(TekBagliPtr tekStart)
{
	if(tekStart != NULL)
	{
		printf("%s->",tekStart->name);
		printTekBagli(tekStart->next);
	}
}
void printCiftBagli(CiftBagliPtr ciftStart)
{
	if(ciftStart != NULL)
	{
		printf("%s->",ciftStart->name);
		printCiftBagli(ciftStart->next);
	}
}
void insertCiftBagli(CiftBagliPtr *ciftStart,char *Cname)
{
	CiftBagliPtr currentPtr,previousPtr,newPtr;

	newPtr = (CiftBagliPtr)malloc(sizeof(CiftBagli));
	strcpy(newPtr->name,Cname);
	currentPtr = (*ciftStart);
	previousPtr = NULL;

	while(currentPtr != NULL &&(strcmp(currentPtr->name,Cname) < 0) )
	{
		previousPtr = currentPtr;
		currentPtr = currentPtr->next;
		
	}

	if(previousPtr == NULL)
	{
		(*ciftStart) = newPtr;
		newPtr->next = currentPtr;
		newPtr->before = NULL;
	}
	else
	{
		previousPtr->next = newPtr;
		newPtr->before = previousPtr;
		newPtr->next = currentPtr;
		if(currentPtr != NULL)
			currentPtr->before = newPtr;
	}
}

void tekToCift(TekBagliPtr *tekStart,CiftBagliPtr *ciftStart)
{
	TekBagliPtr currentPtr,temp;
	char name[20];

	currentPtr = (*tekStart);
	while(currentPtr != NULL)
	{
		strcpy(name,currentPtr->name);
		insertCiftBagli(ciftStart,name);
		temp = currentPtr;
		currentPtr = currentPtr->next;
		free(temp);
	}
}
		


	
		



int main()
{
	TekBagliPtr tekStart = NULL;//tek bağlı listenin başlangıç adresi...
	CiftBagliPtr ciftStart = NULL;
	int kayitSayisi;
	char ad[20];

	printf("Kac tane kayit girmek istiyorsunuz....
");
	scanf("%d",&kayitSayisi);
	flushall();
	for(int i = 0;i < kayitSayisi;i++)
	{
		printf("%d-->isim..
",i+1);
		gets(ad);
		flushall();
		insertTekBagli(&tekStart,ad);
	}
	printf("
***************************
");
	printTekBagli(tekStart);
	printf("NULL");
	printf("
****************************
");
	tekToCift(&tekStart,&ciftStart);
//	printTekBagli(tekStart);
	printf("
****************************
");
	printCiftBagli(ciftStart);
	printf("NULL");



	return 0;

}








Yazar
altuko


avatar

banlandı
Kayıt: 05.02.2006
12.02.2008-21:52 #37852
indigestible yazdi
 
2li ağaçtan tek bağlıya
çift bağlıdan tek bağlıya
tek bağlıdan çift bağlıya(vize)
önceden oluşturulan kuyruktaki elemanları 2li ağaca yerleştiren(vize)

bu programlar elinde olan vea yapabilen war mıı??


Kuyruktan ikili ağaca....
#include <stdio.h>
#include <stdlib.h>

struct Kuyruk
{
	int data;
	struct Kuyruk *next;
};

typedef struct Kuyruk Kuyruk;
typedef Kuyruk *KuyrukPtr;

struct treeNode { 
   struct treeNode *leftPtr;
   int data;
   struct treeNode *rightPtr;
};

typedef struct treeNode TreeNode;
typedef TreeNode *TreeNodePtr;

void insertTree(TreeNodePtr *treePtr,int data)
{
	if((*treePtr == NULL))
	{
		(*treePtr) = (TreeNodePtr)malloc(sizeof(TreeNode));
		(*treePtr)->data = data;
		(*treePtr)->leftPtr = NULL;
		(*treePtr)->rightPtr = NULL;
	}
	else
	{
		if((data > (*treePtr)->data))
			insertTree(&((*treePtr)->rightPtr),data);
		else
			insertTree(&((*treePtr)->leftPtr),data);
	}
	
	
}


void printTree(TreeNodePtr treePtr)
{
	if(treePtr != NULL)
	{
		printf("%d->",treePtr->data);
		printTree(treePtr->leftPtr);
		printTree(treePtr->rightPtr);
	}
}

void SirayaGir(KuyrukPtr *bas,KuyrukPtr *son,int data)
{
	KuyrukPtr newPtr;
	
	newPtr = (KuyrukPtr)malloc(sizeof(Kuyruk));
	newPtr->data = data;
	newPtr->next = NULL;
	if((*bas) == NULL)
	{
		(*bas) = newPtr;
		(*son) = newPtr;
	}
	else
		(*son)->next = newPtr;
	(*son) = newPtr;
}

int SiradanCik(KuyrukPtr *bas,KuyrukPtr *son)
{
	int data;
	KuyrukPtr tempPtr;

	data = (*bas)->data;
	tempPtr = (*bas);
	(*bas) = (*bas)->next;
	if((*bas) == NULL)
		(*son) = NULL;
	free(tempPtr);

	return data;
}

void printKuyruk(KuyrukPtr tempPtr)
{
	if(tempPtr != NULL)
	{
		printf("%d->",tempPtr->data);
		printKuyruk(tempPtr->next);
	}
}

void kuyrukToTree(KuyrukPtr *bas,KuyrukPtr *son,TreeNodePtr *treePtr)
{
	KuyrukPtr currentPtr;
	int data;

	currentPtr = (*bas);
	while(currentPtr != NULL)
	{
		data = SiradanCik(bas,son);
		insertTree(treePtr,data);
		currentPtr = (*bas);
	}
}


int main()
{
	TreeNodePtr kokPtr = NULL;
	KuyrukPtr bas = NULL;
	KuyrukPtr son = NULL; 
	int kayitSayisi;
	int eleman;

	printf("Elaman sayisi...
");
	scanf("%d",&kayitSayisi);
	flushall();
	for(int i=0;i<kayitSayisi;i++)
	{
		printf("%d->eleman
",i+1);
		scanf("%d",&eleman);
		flushall();
		SirayaGir(&bas,&son,eleman);
	}
	printf("
********************************
");
	printKuyruk(bas);
	printf("
********************************
");
	kuyrukToTree(&bas,&son,&kokPtr);
	printTree(kokPtr);
	printf("
********************************
");

	return 0;

}





	


		






Yazar
altuko


avatar

banlandı
Kayıt: 05.02.2006
12.02.2008-22:05 #37855
Bu da ikili ağaçtan çift bağlıya...

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

struct ListNode
{
	int veri;
	struct ListNode *next;
	struct ListNode *before;
};

typedef struct ListNode ListNode;
typedef struct ListNode* ListNodePtr;

struct treeNode { 
   struct treeNode *leftPtr;
   int data;
   struct treeNode *rightPtr;
};

typedef struct treeNode TreeNode;
typedef TreeNode *TreeNodePtr;

void insertTree(TreeNodePtr *treePtr,int data)
{
	if((*treePtr == NULL))
	{
		(*treePtr) = (TreeNodePtr)malloc(sizeof(TreeNode));
		(*treePtr)->data = data;
		(*treePtr)->leftPtr = NULL;
		(*treePtr)->rightPtr = NULL;
	}
	else
	{
		if((data > (*treePtr)->data))
			insertTree(&((*treePtr)->rightPtr),data);
		else
			insertTree(&((*treePtr)->leftPtr),data);
	}
	
	
}


void printTree(TreeNodePtr treePtr)
{
	if(treePtr != NULL)
	{
		printf("%d->",treePtr->data);
		printTree(treePtr->leftPtr);
		printTree(treePtr->rightPtr);
	}
}
void insertList(ListNodePtr *startPtr,int data)
{
	ListNodePtr currentPtr,previousPtr;
	ListNodePtr newPtr;

	newPtr = (ListNodePtr)malloc(sizeof(ListNode));
	newPtr->veri = data;
	currentPtr = (*startPtr);
	previousPtr =  NULL;
	while(currentPtr != NULL && currentPtr->veri < data)
	{
		previousPtr = currentPtr;
		currentPtr = currentPtr->next;
	}

	if(previousPtr == NULL)
	{
		newPtr->next = (*startPtr);
		newPtr->before = NULL;
		(*startPtr) = newPtr;
	}
	else
	{
		newPtr->next = currentPtr;
		newPtr->before = previousPtr;
		previousPtr->next = newPtr;
		if(currentPtr != NULL)
			currentPtr->before = newPtr;
	}
}


void printList(ListNodePtr startPtr)
{
	
	while(startPtr != NULL)
	{
		printf("%d->",startPtr->veri);
		startPtr = startPtr->next;
	}
	printf("
*****************************
");
}

void treeToList(TreeNodePtr treePtr,ListNodePtr *startPtr)
{
	if(treePtr != NULL)
	{
		insertList(startPtr,treePtr->data);
		treeToList(treePtr->leftPtr,startPtr);
		treeToList(treePtr->rightPtr,startPtr);
	}
}

int main()
{
	TreeNodePtr kokPtr = NULL;
	ListNodePtr startPtr = NULL;
	int kayitSayisi;
	int eleman;

	printf("Elaman sayisi...
");
	scanf("%d",&kayitSayisi);
	flushall();
	for(int i=0;i<kayitSayisi;i++)
	{
		printf("%d->eleman
",i+1);
		scanf("%d",&eleman);
		flushall();
		insertTree(&kokPtr,eleman);
	}
	printf("
********************************
");
	printTree(kokPtr);
	printf("
********************************
");
	treeToList(kokPtr,&startPtr);
	printf("
********************************
");
	printList(startPtr);
	return 0;

}





	


		






Yazar
indigestible


avatar

Kayıt: 27.01.2007
12.02.2008-22:21 #37860
çooook teşekkürleeerrr!!

çift bağlı listeden tek bağlıya olanı da koyabilirsen daa da süper olcak..

ya gerçekten çok saol..geçersem sayende geçicem heralde;)






Yazar
tuuba


avatar
Bursa
Kayıt: 22.01.2007
12.02.2008-22:24 #37863
altuko yazdi
 
.......................


Çok teşekkürler....applauseapplauseapplauseapplauseapplause





Yazar
ozerozkn


avatar

banlandı
Kayıt: 12.02.2006
12.02.2008-22:36 #37868
altuko süpersin ya applause





1 2 3 4 5 6 7 8
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb