예제 #1
0
int main(int argc, char *argv[])
{
	AVLTree *pTree = NULL;
	AVLTreeNode *pSearch = NULL;
	int key = 0;

	AVLTreeNodeData eB = {9, "키 값이 9"};
	AVLTreeNodeData eG = {3, "키 값이 3"};
	AVLTreeNodeData eE = {1, "키 값이 1"};
	AVLTreeNodeData eC = {10, "키 값이 10"};
	AVLTreeNodeData eL = {12, "키 값이 12"};
	AVLTreeNodeData eH = {6, "키 값이 6"};
	AVLTreeNodeData eI = {4, "키 값이 4"};
	AVLTreeNodeData eF = {5, "키 값이 5"};

	pTree = createAVLTree();
	if (pTree != NULL) 
	{
		printf("1)\n");
		insertNodeAVL(pTree, eB);
		displayAVLTree(pTree);

		printf("\n2)\n");
		insertNodeAVL(pTree, eG);
		displayAVLTree(pTree);
		
		printf("\n3) LL 회전 발생\n");
		insertNodeAVL(pTree, eE);
		displayAVLTree(pTree);
		
		printf("\n4)\n");
		insertNodeAVL(pTree, eC);
		displayAVLTree(pTree);
		
		printf("\n5) RR 회전 발생\n");
		insertNodeAVL(pTree, eL);
		displayAVLTree(pTree);
		
		printf("\n6) RL 회전 발생\n");
		insertNodeAVL(pTree, eH);
		displayAVLTree(pTree);
		
		printf("\n7)\n");
		insertNodeAVL(pTree, eI);
		displayAVLTree(pTree);
		
		printf("\n8) LR 회전 발생\n");
		insertNodeAVL(pTree, eF);
		displayAVLTree(pTree);

		deleteAVLTree(pTree);
	}

	return 0;
}
예제 #2
0
int main()
{
	Tree * testTree;
	int (*compare)(void *, void *, void*, void*);
    void (*destroy)(void *);
    compare = &comparePointer;
    destroy = &destroyPointer;
	testTree = createAVLTree(compare,destroy);
	parseDirectory("testdir/", testTree);
	findInTree(testTree, "file.c");
	removeFromTree(testTree, "testdir/", "file.c");
	destroyAVLTree(testTree);
	return(0);
}
예제 #3
0
/// Function name  : duplicateAVLTree
// Description     : Duplicate an AVL tree, performing a shallow copy of objects
// 
// AVL_NODE_EXTRACTOR        pfnExtractValue     : [in]           TreeNode value extraction function, for performing comparisons
// DESTRUCTOR                pfnDeleteNode       : [in][optional] TreeNode deletion function. If this is not specified then the objects will not be destroyed with the tree
// CONST AVL_TREE_KEY*       ePrimaryKey         : [in]           Primary sorting property
// CONST AVL_TREE_KEY*       eSecondaryKey       : [in][optional] Secondary sorting property
// CONST AVL_TREE_KEY*       ePrimarySortOrder   : [in][optional] Tertiary sorting property
// 
// Return Value   : New AVLTree, you are responsible for destroying it
// 
BearScriptAPI 
AVL_TREE*  duplicateAVLTree(AVL_TREE*  pTree, AVL_TREE_KEY*  pNewPrimaryKey, AVL_TREE_KEY*  pNewSecondaryKey, AVL_TREE_KEY*  pNewTertiaryKey)
{
   AVL_TREE_OPERATION*  pOperationData;
   AVL_TREE*            pNewTree;

   /// Create new tree
   pNewTree = createAVLTree(pTree->pfnExtractValue, pTree->pfnDeleteNode, pNewPrimaryKey, pNewSecondaryKey, pNewTertiaryKey);

   // Prepare replication operation
   pOperationData              = createAVLTreeOperation(treeprocReplicateAVLTreeNode, ATT_INORDER);
   pOperationData->pOutputTree = pNewTree;

   /// Copy objects into new tree
   performOperationOnAVLTree(pTree, pOperationData);

   // [CHECK] Index tree if appropirate
   if (pTree->bIndexed)
      performAVLTreeIndexing(pNewTree);

   // Cleanup and return new object
   deleteAVLTreeOperation(pOperationData);
   return pNewTree;
}
예제 #4
0
/// Function name  : createVariableNameTreeByText
// Description     : Creates a variables tree sorted by Text
// 
// Return Value   : New AVLTree, you are responsible for destroying it
// 
BearScriptAPI
AVL_TREE*  createVariableNameTreeByText()
{
   // Create tree of VariableNames indexed by name and in alphabetical order
   return createAVLTree(extractVariableNameTreeNode, deleteVariableNameTreeNode, createAVLTreeSortKey(AK_TEXT, AO_DESCENDING), NULL, NULL);
}
예제 #5
0
/// Function name  : createArgumentTreeByID
// Description     : Creates an ARGUMENT tree sorted by ID
// 
// Return Value   : New AVLTree, you are responsible for destroying it
// 
AVL_TREE*  createArgumentTreeByID()
{
   // Create a tree of Arguments organised by ID
   return createAVLTree(extractArgumentTreeNode, deleteArgumentTreeNode, createAVLTreeSortKey(AK_ID, AO_ASCENDING), NULL, NULL);
}