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


avatar

banlandı
Kayıt: 05.02.2006
12.02.2008-22:58 #37879
indigestible yazdi
 
ç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;)

ÇiftBağlıdan tek bağlıya...tekbağlıdan çift bağlıya olanla aynı mantık.o yüzden koymamıştım.....kolay gelsin herkese

#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 ciftToTek (CiftBagliPtr *ciftStart,TekBagliPtr *tekStart)
{
	CiftBagliPtr tempPtr;
	CiftBagliPtr currentPtr;
	char ad[20];
		
	currentPtr= (*ciftStart);
	while(currentPtr != NULL)
	{
		strcpy(ad,currentPtr->name);
		insertTekBagli(tekStart,ad);
		tempPtr = currentPtr;
		currentPtr = currentPtr->next;
	}
}


	

		


	
		



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();
		insertCiftBagli(&ciftStart,ad);
	}
	printf("
***************************
");
	printCiftBagli(ciftStart);
	printf("NULL");
	printf("
****************************
");
	ciftToTek(&ciftStart,&tekStart);
	printf("
****************************
");
	printTekBagli(tekStart);
	printf("NULL");



	return 0;

}








Yazar
reccae


avatar
istanbul
banlandı
Kayıt: 15.02.2006
12.02.2008-23:23 #37887
http://img265.imageshack.us/img265/7497/ikiliagaczq6.jpg

finaldeki ilk soru peace
sanırım anlaşılıyor resimden direk hangisinin sağda yada solda olduğu.
hoca bütte 2 adet şekil soracak sanırım yine. bunlara iyi çalışırsanız dersi geçmeniz kolaylaşır.






insa ettigim binanin cimentosu kelâm

Yazar
serdar5


avatar

Kayıt: 12.02.2006
12.02.2008-23:39 #37889
altuko kardeşim sabahtan beri eklediin ornekleri arıyorm sağda solda ama bi türlü ulaşamadım o yüzden sana bir kaç çift lafım var "ALLAH RAZI OLSUN SENDEN "applause





Kanit gösterilmeden yapilmis bir iddiayi çürütmek için kanita ihtiyaç yoktur
Yazar
altuko


avatar

banlandı
Kayıt: 05.02.2006
12.02.2008-23:54 #37893
serdar5 yazdi
 
altuko kardeşim sabahtan beri eklediin ornekleri arıyorm sağda solda ama bi türlü ulaşamadım o yüzden sana bir kaç çift lafım var "ALLAH RAZI OLSUN SENDEN "applause


Önemli değil...Yardımım dokunduysa ne mutlu bana...

Çift bağlıdan Stack'e Stack den ÇiftBağlıya kodu da bu...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Stack 
{
	char name[20];
	struct Stack *next;
};

typedef struct Stack Stack;
typedef Stack* StackPtr;

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

typedef struct CiftBagli CiftBagli;
typedef CiftBagli* CiftBagliPtr;


void insertCiftBagli(CiftBagliPtr *start,char *Cname)
{
	CiftBagliPtr newPtr;
	CiftBagliPtr currentPtr,previousPtr;

	newPtr = (CiftBagliPtr)malloc(sizeof(CiftBagli));
	strcpy(newPtr->name,Cname);
	currentPtr = (*start);
	previousPtr = NULL;
	while(currentPtr != NULL && (strcmp(currentPtr->name,Cname) < 0))
	{
		previousPtr = currentPtr;
		currentPtr = currentPtr->next;
	}
	if(previousPtr == NULL)
	{
		newPtr->next = currentPtr;
		newPtr->before = NULL;
		(*start) = newPtr;
	}
	else
	{
		previousPtr->next = newPtr;
		newPtr->before = previousPtr;
		newPtr->next = currentPtr;
		if(currentPtr != NULL)
			currentPtr->before = newPtr;
	}
}

void pushStack(StackPtr *topPtr,char *Sname)
{
	StackPtr newPtr;

	newPtr = (StackPtr)malloc(sizeof(Stack));
	strcpy(newPtr->name,Sname);
	newPtr->next = (*topPtr);
	(*topPtr) = newPtr;

}

char *popStack(StackPtr *topPtr)
{
	char name[20];
	StackPtr tempPtr;

	strcpy(name,(*topPtr)->name);
	tempPtr = (*topPtr);
	(*topPtr) = (*topPtr)->next;

	return name;
}

void printList(CiftBagliPtr listPtr)
{
	if(listPtr != NULL)
	{
		printf("%s->",listPtr->name);
		printList(listPtr->next);
	}
}

void printStack(StackPtr topPtr)
{
	if(topPtr != NULL)
	{
		printf("%s->",topPtr->name);
		printStack(topPtr->next);
	}
}
void StackToList(StackPtr *top,CiftBagliPtr *start)
{
	StackPtr currentPtr;

	currentPtr = (*top);
	while(currentPtr != NULL)
	{
		insertCiftBagli(start,popStack(top));
		currentPtr = (*top);
	}
}

	
void ListToStack(CiftBagliPtr *start,StackPtr *top)
{
	CiftBagliPtr currentPtr;
	CiftBagliPtr tempPtr;

	currentPtr = (*start);
	while(currentPtr != NULL)
	{
		pushStack(top,currentPtr->name);
		(*start) = (*start)->next;
		tempPtr = currentPtr;
		currentPtr = (*start);
		free(tempPtr);
	}

}


int main()
{
	CiftBagliPtr startPtr = NULL;
	StackPtr topPtr = 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();
		insertCiftBagli(&startPtr,ad);
	}
	printf("
**********************************
");
	printList(startPtr);
	printf("
**********************************
");
	ListToStack(&startPtr,&topPtr);
	printStack(topPtr);
	printf("
");

	return 0;	
	

}






Yazar
indigestible


avatar

Kayıt: 27.01.2007
13.02.2008-00:32 #37911
10 numarasın gerçekten..çok saol..





Yazar
reccae


avatar
istanbul
banlandı
Kayıt: 15.02.2006
13.02.2008-01:39 #37926
altuko paylaşımın için teşekkürler. finalde geçmiştim ama biraz inceleyip tekrar yapmakta fayda var peace

bu bir yapıdan diğer yapıya veri aktarma işine gelince ezber yapmanıza gerek yok hiç bir şeyi. 2-3 okuma ve 2-3 kaydetme alt programını yazabiliyorsanız bunların hepsini yapabilirsiniz peace

yani elinizdeki yapıdaki tüm verileri sırasıyla okuyup yeni yapıya kaydedilmek üzere göndereceksiniz. hepsi bu. okuma kısmı genelde 3-7 satır arasında sürüyor biggrin kaydetme fonksiyonu da yapının türüne göre 15-30 satır arası sürebiliyor. 10 satırda 2 tane struct tutsa eder size en fazla 50 satır peace

eski yapıyı okuma kısmını main içinde yaparsınız, yeni yapınızın örneğini de mainde tanımlarsınız ve bu şekilde nerdeyse her türlü veri aktarma kodunu yazabilirsiniz.

sınavda şimdiden hepinize başarılar.

unutmadan ekleyim bu dönem veri yapıları dersi mükemmel geçti peace
derste konuşmayan, hocayı dikkatle dinleyen, sorularıyla anlamadığımız yerleri anlamamızda yardımcı olan tüm arkadaşlara teşekkürler. derste geyik yapacak kişiler kantinde muhabbet ederse sanırım hepimiz için en hayırlısı bu olacak.







insa ettigim binanin cimentosu kelâm

Yazar
altuko


avatar

banlandı
Kayıt: 05.02.2006
13.02.2008-01:49 #37928
reccae yazdi
 
altuko paylaşımın için teşekkürler. finalde geçmiştim ama biraz inceleyip tekrar yapmakta fayda var peace

bu bir yapıdan diğer yapıya veri aktarma işine gelince ezber yapmanıza gerek yok hiç bir şeyi. 2-3 okuma ve 2-3 kaydetme alt programını yazabiliyorsanız bunların hepsini yapabilirsiniz peace

yani elinizdeki yapıdaki tüm verileri sırasıyla okuyup yeni yapıya kaydedilmek üzere göndereceksiniz. hepsi bu. okuma kısmı genelde 3-7 satır arasında sürüyor biggrin kaydetme fonksiyonu da yapının türüne göre 15-30 satır arası sürebiliyor. 10 satırda 2 tane struct tutsa eder size en fazla 50 satır peace

eski yapıyı okuma kısmını main içinde yaparsınız, yeni yapınızın örneğini de mainde tanımlarsınız ve bu şekilde nerdeyse her türlü veri aktarma kodunu yazabilirsiniz.

sınavda şimdiden hepinize başarılar.

unutmadan ekleyim bu dönem veri yapıları dersi mükemmel geçti peace
derste konuşmayan, hocayı dikkatle dinleyen, sorularıyla anlamadığımız yerleri anlamamızda yardımcı olan tüm arkadaşlara teşekkürler. derste geyik yapacak kişiler kantinde muhabbet ederse sanırım hepimiz için en hayırlısı bu olacak.




Okuyup kaydetme işi kolay..kodu incelediysen STack den çiift bağlıya aktarma yaparken pop yaptım(veriyi sstackten sildim).eğer aktarma dediği kopyalamaysa kolay.hem silip hemde kopyalamaysa ağaçta flan kasar.





Yazar
reccae


avatar
istanbul
banlandı
Kayıt: 15.02.2006
13.02.2008-02:01 #37929
silme kısmını yazmaya gerek yok diye düşünüyorum sonuçta okuyup kaydettik mi sınavda hocanın istediği şeyi yapmış oluyoruz.
ağaç için çıkartmak falan eziyetli olur mesela.

pop ile çıakrtmayın dersem ve hoca çıkartacaksınız derse sorumluluk almak istemem ama bizim pop işlemini yapmamız yapı için bir şey değiştirmez.

bu arada cidden sağol kodlar için peace
bir bilgisayar mühendisi bu tür bir uygulamada push pop hepsini yazmalı ama sınavda zaman derdi olunca insan aman o da çıkmayıversin diyor biggrin


neyse işte anladınız siz peace
sınavda vakit yetişmeyecekse pop işlemini atlayabilirsiniz gönül rahatlığı ile.





insa ettigim binanin cimentosu kelâm

Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
13.02.2008-18:10 #37987
struct treenode dan sonra


typedef struct treenode *nodeptr;

ve arkasından da

nodeptr *ptr olsun..

burda ptr , treenode yapısında bir pointerın adresini tutan bir pointer mı oluyo??

burda kafam karıştı yardımcı olabilirseniz....????





Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
13.02.2008-18:18 #37989
kısacası şu koddaki pointer mantığını anlata bilirseniz çok sevinirm..


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);
}


}


prayingpraying





Yazar
altuko


avatar

banlandı
Kayıt: 05.02.2006
13.02.2008-18:23 #37992
adresin adresiyle işlem yapıyorum.çünkü fonksiyona gönderdiğim pointerin değerin değişmesini istiyorum.onun için adresi yolllamam gerekiyor.başlangıç kök düğüm null,onun adresini bu fonksiyona gönderdiğimiz de bizim için bi start değeri oluşturur.Umarım anlatabilmişimdir.





Yazar
uslanmaz4


avatar
ANKARA
Kayıt: 15.01.2006
13.02.2008-18:29 #37994
tesekkurlerapplauseapplauseapplauseapplauseapplauseapplauseapplauseapplauseapplause





kedicik kedicik
Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
13.02.2008-18:30 #37995
altuko yazdi
 
adresin adresiyle işlem yapıyorum.çünkü fonksiyona gönderdiğim pointerin değerin değişmesini istiyorum.onun için adresi yolllamam gerekiyor.başlangıç kök düğüm null,onun adresini bu fonksiyona gönderdiğimiz de bizim için bi start değeri oluşturur.Umarım anlatabilmişimdir.


anladım teşekkür applause peacepeace





Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
13.02.2008-21:25 #38012
iplikli ikili ağaç sorusu gelir mi?? (kod) ?? veya sıralama algoritmalarından???

kestane kebap acele cevapbiggrin


edit: sıralama olacak o kafayı yemişimlaughingbiggrin





Yazar
akgulozkan


avatar
istanbul
Kayıt: 12.12.2006
13.02.2008-22:04 #38015
Final 1. sorunun cevabı :

DLR : CBAFIGDHEJK
LDR : BFIGAHDJEKC
LRD : GIFHJKEDABC

hatam varsa vur yüzüme.tongue





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