コード例 #1
0
ファイル: binarysearchtree.c プロジェクト: konstantok/Studies
int main() {
    node * curr;

    char input[15];

    printf("Creating binary tree...");
    makeempty();
    printf("\tDone\n\n");
    
    char delims[] = " ";
    char *result = NULL;
    char *item = NULL;

    while (1){
          printf("What would you like to do?\n[help for list of commands]\n");
          gets(input);
          
          search_count = 0;
          
          result = (char *) strtok( input, delims );
          
          if(!strcmp("insert", result))
          {
               item = (char *) strtok( NULL, delims );
               
               if( !find(root, atoi(item)) )
               {
                   curr = (node *)malloc(sizeof(node));
                   curr->left = curr->right = NULL;
                   curr->val = atoi(item);
                   insert(&root, curr);       
                   printout(root);
               }
               else printf("Value %d exists\n\n", atoi(item));
               continue;                          
          }
          
          
          if(!strcmp("delete", result))
          {
               item = (char *) strtok( NULL, delims );
               
               if( find(root, atoi(item)) )
               {
                   printf("Found value %d \n", atoi(item));
                   deleteval( root , atoi(item) );
                   printf("Value %d deleted\n\n", atoi(item));
               }
               else printf("Value %d does not exist\n\n", atoi(item));
               continue;                          
          }
          
          
          if(!strcmp("search", result))
          {
               item = (char *) strtok( NULL, delims );
               
               if( find(root, atoi(item)) )
               {
                   printf("Found value %d - %d nodes walked\n\n", atoi(item), search_count);
               }
               else printf("Value %d does not exist\n\n", atoi(item));
               continue;                          
          }
          
          
          if(!strcmp("max", result))
          {
               if(root != NULL)
                       printf("Max value: %d\n\n", max(root));
               else           printf("Search tree is empty\n\n");
               
               continue;                          
          }
          
          
          if(!strcmp("succ", result))
          {
               item = (char *) strtok( NULL, delims );
               
               int x, tree_max;
               
               if( root == NULL )
               {
                   printf("Search tree is empty\n\n");
                   continue;
               }
               
               x = succ( root , atoi(item) , NULL);
               
               if(x==NULL)
               {
                    printf("Value %d is larger than any other value in tree\n\n", atoi(item));
                    continue;           
                    //printf("Value's %d next larger value is %d\n\n", atoi(item) , x );
               }
               else if ( x == atoi(item) )
               {
                    printf("Value %d is the largest value in tree\n\n", atoi(item));
                    continue;           
                    //printf("Value's %d next larger value is %d\n\n", atoi(item) , x );
               }
               else
               {
                   printf("Value %d is the next larger value of %d\n\n", x , atoi(item));
                   continue;
               }
               continue;                          
          }
          
          
          if(!strcmp("subtree", result)){
                   result = strtok( NULL, delims );
                   if(!strcmp("leaves", result)){
                       item = (char *) strtok( NULL, delims );
                       if( find(root, atoi(item)) )
                       {
                           find_print(root, atoi(item));
                       }
                       else printf("Value %d does not exist\n\n", atoi(item));
                       
                       continue;
                   }
                   else {
                        printf("Please give a valid command\n\n");
                        continue;
                   }
          }
          
          
          if(!strcmp("exit", result)){
               printf("Destroing tree...\t");
               //printf("\n");
               tree_destroy(root);
               printf("Done\n\n");
               printf("Bye bye!\n\n\n");
               break;              
          }
          
          
          if(!strcmp("help", result)){
               printf("\nList of commands: \ninsert x \ndelete x \nsearch x \nmax \nsucc x \nsubtree leaves x \nexit \n\n");
               continue;
          }

          
          printf("Please give a valid command\n\n");
    }
          
    //sleep(1000);
   
    return 0;
}
コード例 #2
0
int find(st_info *buf_head,const int flag_num)
{
	char check[21];
	st_info *p1 = buf_head,*p2 = NULL,*p3 = NULL;
	find_link *q1,*q2,*find_head=NULL;
	unsigned int flag_find = 0;
	system("cls");
	switch (flag_num)
	{
	case 0:print_tips("  查询学生体检信息  ");break;
	case 2:print_tips("  修改学生体检信息  ");break;
	case 1:print_tips("  删除学生体检信息  ");break;
	}
	if(buf_head->next == NULL)
	{
		printf("\n Error!-----没有数据可供查询!请录入!");
		return 0;
	}
	printf("\n\n\n\n Tips:-----请输入姓名或者学号:");
	fflush(stdin);
	scanf("%20s",check);
	print_star();
	printf(menu_print);
	while (p1->next)
	{
		p2 = p1;
		p1 = p1->next;
		if(strcmp(p1->name,check) == 0 || strcmp(p1->num,check) == 0)
		{
			++flag_find;
			if(flag_find == 1)
			{
				find_head = (find_link *)malloc(M);
				q1 = (find_link *)malloc(M);
				find_head->next = q1;
			}
			q1->buf_find = p2;
			q2 = q1;
			q1 = (find_link *)malloc(M); 
			q2->next = q1;
		}
	}
	if(flag_find != 0)
	{
		free(q1);
		q2->next = NULL;
	}
	printf("\n\n");
	if(flag_find > 10)
	{
		free_find(find_head);
		printf("\n\n Warning!-----系统检测到您的查询结果已超过10个,数据文件可能存在问题!请检查!");
		return 0;
	}
	find_print(find_head,flag_find);
	if(find_head == NULL)
	{
		return 0;
	}
	switch (flag_num)
	{
	case 0:free_find(find_head);break;
	case 1:del_info(find_head,flag_find);free_find(find_head);break;
	case 2:change_info(find_head,flag_find);free_find(find_head);break;
	}
	return 1;
}
コード例 #3
0
ファイル: binarysearchtree.c プロジェクト: konstantok/Studies
void find_print(node * t, int x ) {
    if(t->val==x)    printout(t);
	if(x<t->val)     return find_print(t->left, x);
	if(x>t->val)     return find_print(t->right, x);
}