Tweet

AVL Veri Yapısı

Bu konumuzda AVL veri yapısına değineceğiz.Anlaşılırlık bakımından kısa açıklma yapalım.
Genellikle öğrencilere ödev olarak verilen AVL veri yapısı kodlama bakımından oldukça zor
bir ödevdir.Bu dönem benim de ihtiyacım olmuş,zamanım olmadığı için netten araştırmıştım.
Ama gördüm ki nette genellikle bu veri yapısının Java kodu bulunmakta.İstedim ki bir ilk olarak
bizim sitemizde yer alsın yazmış olduğum AVL veri yapısını sizlere sunuyorum.Kodları vermeden önce
konuya ufaktan değinmeye yarar olduğunu umuyorum.[...]
===============================================================
Avl veri yapısı ilk olarak 1962 yılında iki rus matematikçi G. M. Adelson-Velskil ve E. M. Landis
tarafından yaratılmıştır.Daha sonra bu veri yapısısimlerinin baş harfi olan AVL olarak adlandırılmıştır.
Bildiğimiz gibi ikili ağaç yapılarında öyle durumlar vardırki ya sol ağacınız alabildiğine uzun ya da
sağ ağacınız alabildiğine uzundur.Bu tür istisnai durumları engellemek için AVL veri yapısı yaratılmış
olup her ekleme , silem operasyonundan sonra balance (denkleştirme) yapılmalıdır.Şimdi sırası ile
önce bu kodun header.h ' ını verelim ve daha sonra avl.c kodunu yazalım;

CODE:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>


typedef struct tree_nodes{ //Create the sutructure of data
int number;
int balance;
struct tree_nodes *leftSub; //The variable of the node
struct tree_nodes *rightSub;
}tree_nodes;

typedef struct{ //Create the head node that holds the root "root" node adress and "counter" count value of nodes
int counter;
struct tree_nodes *root;
}tree_Root;

=== Define the functions ===
int menu_select(void); //The option of the menu selection
tree_Root* create_tree(); //Creates the head that holds the adress of root node
tree_nodes* insert_to_AVL(tree_Root *pRoot,tree_nodes *pWalk,tree_nodes *pNew,int taller);//Inserts the nodes to the tree
tree_nodes* allocate_memory(void); //Allocates the neccessary memory space
void display_all(tree_nodes *pDisp); //Display the whole elements
int delete_AVL(tree_Root *pTree,int delete_value); //Delete one node from tree
void destroy(tree_nodes *pDestroy); //Destroy the whole list

=================================================================================
Şimdi kullanıcıdan gerekli verileri alıp veri yapısını oluşturduğumuz main kodunu verelim;

[CODE]
/***********************************************************************************
* Created by: thecoders.net
* Written : Seyhan
*
* THIS PROGRAM CREATES A TREE STRUCTURE AND STORES NUMBERS
* THEN DOES THE GIVEN FUNCTIONS
*
************************************************************************************/
#include"header.h"

//== MAIN FUNCTION ==
void main (void)
{ //Initialize the variables
int choise = 0,enter = 0,taller =0; //selection "choise" ,given number "enter",level value "taller"
int delete_value = 0; //deletekey "delete_value"
tree_Root *pRoot; //pRoot: head node pointer
tree_nodes *pNew; //poNew: new node pointer

//Print the aim of program
printf("____________________________________________________________n");
printf("nTHIS PROGRAM CREATES AN AVL TREE STRUCTURE AND STORES NUMBERSnTHEN DOES THE GIVEN FUNCTIONSn");
printf("____________________________________________________________");

pRoot = create_tree(); //Create the head node and initialize

for(;;) //Infinite loop for the menu
{
choise= menu_select(); //Give the main menu until the enetered value is 4
switch(choise) //Different call of fumction according to selection
{
case 1: //Insert data to tree
{
printf("n____ IN ORDER TO FINISH ADDING ENTER -1 ____n");

//Continue to adding until given value is -1
for(;;)
{
printf("Enter your number: ");
scanf("%d",&enter);

if(enter == -1)
break;

pNew = allocate_memory();
pNew ->number = enter;

//Insertion function
pRoot ->root = insert_to_AVL(pRoot,pRoot ->root,pNew,taller);

}
} break;
case 2: //Display the whole elements
{
if(pRoot ->counter == 0)

printf("nt!!!NOTHING entered to display!!!");
else
{
printf("n*** THE LIST CONTAINS:t");
display_all(pRoot ->root);
}
} break;
case 3: //Delete the selected value
{
fflush(stdin);

if(pRoot ->counter == 0)

printf("nt!!!The list is already empty!!!");
else
{
printf("nEnter your value to delete: ");
scanf("%d",&delete_value);

delete_AVL(pRoot,delete_value);
}

} break;
case 4: //Destroy the whole tree
{
destroy(pRoot ->root);
printf("n****** The whole data DELETED *******");
free(pRoot);
pRoot = create_tree();
}
break;
case 5:
{
free(pRoot);
exit(0);
}
}
printf("n");
system("pause");
system("cls");
}
}

//==Create the head node space and return the address===
tree_Root* create_tree()
{
tree_Root *New_head; //Define the pointer name and type

New_head = (tree_Root*)malloc(sizeof(tree_Root)); //Allocate the neccessary memory space

if(!New_head){ //If memory not avaliable caution exit
printf("Out of memoryn");
exit(0);
}

New_head ->root = '


seyhan

9 Ocak 2008 22:52

İlgili Olabilecek Makaleler


Yorumlar (1)





Dia
15 Haziran 2009 13:33
AVL ağaç yapısını kavramada yardımcı olacağını düşündüğüm bikaç linki paylaşmak istedim.
http://e-bergi.com/2009/Subat/AVL-Agaci
http://en.wikipedia.org/wiki/AVL_tree (en)

Ziyaretçi olarak yorum yazamazsınız. Üye olmak için tıklayın Üye iseniz giriş yapın.



MENÜ » FORUM
Menü » Takip et
RSS Facebook Twitter Friendfeed
Sık Kullanılanlar Google Yahoo Live
Menü » Paylaş
E-Posta ile gönder Twitter Facebook Friendfeed
Buzz Stumbleupon Delicious Digg