我一直在编写一个程序,该程序应该确定该过程花费了多长时间,但是它失败了,并且始终返回0.0000秒的值。
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <time.h>
struct node
{
int data;
struct node *left;
struct node *right;
};
struct node *tree;
struct node *InsertElement(struct node *, int); //declaration//
struct node *findLargestElement(struct node *);
void create_tree(struct node *);
void create_tree(struct node *tree)
{
tree=NULL; //resets the tree//
}
struct node *findLargestElement(struct node *tree)
{
if((tree==NULL)|| (tree->right==NULL))
return tree;
else
return findLargestElement(tree->right);
}
struct node *InsertElement(struct node *tree, int val)
{
struct node *ptr, *nodeptr, *parentptr;
ptr = (struct node*)malloc(sizeof(struct node)); //memory allocation//
ptr->data = val;
ptr->left = NULL;
ptr->right = NULL;
if(tree==NULL) //for root node//
{
tree=ptr;
tree->left=NULL;
tree->right=NULL;
}
else
{
parentptr=NULL;
nodeptr=tree;
while(nodeptr!=NULL)
{
parentptr=nodeptr;
if(val<nodeptr->data)
nodeptr=nodeptr->left; //if value is less than root go left//
else
nodeptr = nodeptr->right;//if more go right//
}
if(val<parentptr->data)//if less than parent go left//
parentptr->left = ptr;
else
parentptr->right = ptr;
}
return tree;
}
int main()
{
int option, val;
struct node *ptr;
clock_t begin, end;
create_tree(tree);
do
{
printf("\n\n\n\t\t*****Main Menu****\n\n");
printf("\t\t 1. Add new nodes: \n");
printf("\t\t 2. Find the largest element\n");
printf("\t\t 11. Exit\n");
printf("Enter your option : ");
scanf("%d", &option);
switch(option)
{
case 1: printf("\nEnter the value of the new node:");
scanf("%d", &val);
tree= InsertElement(tree,val);
break;
case 2: begin=clock(); //timer begin//
ptr = findLargestElement(tree);
end=clock(); //timer ends//
double time_spent=(double)(end-begin)/CLOCKS_PER_SEC; //time elapsed//
printf("\nThe largest element is:%d\n", ptr->data);
printf("The time taken is %f end time is", time_spent);
break;
}
}while(option!=11);
return 0;
}
这是程序的一部分,该程序将在二进制搜索树中找到最大值。 (编辑:我添加了其他代码来进行澄清。该程序将让用户输入树的节点,然后相应地重新排列节点,理论上节点数没有限制。我的主要问题还是我的实现计时器是否正确?还是还有其他方法?) 这只是我编写的代码的一部分,我想知道是否有其他方法可以替代过程花费的时间,或者我是否编码错误。我希望所花费的时间是经过的时间。这种方法仅适用于循环吗?
我尝试过类似的事情
begin=clock();
ptr = findLargestElement(tree);
end=clock();
printf("The start time %f and the end time is %f", begin,end)
它返回的开始时间为0,并且结束时间为大数,但是将其转换为秒似乎对我不起作用。
(其他信息:我已经阅读了time.h文档,并且似乎clock()应该可以工作,我一直在尝试在StackOverflow上提到的其他方法,但是它们似乎都不起作用。是因为我使用了而是一个结构?) 谢谢
答案 0 :(得分:0)
类型clock_t
不一定是double
,它可以是整数类型。
一种方法是
double begin = ((double )clock()) / CLOCKS_PER_SEC;
ptr = findLargestElement(tree);
double end = ((double )clock()) / CLOCKS_PER_SEC;
printf("The time taken is %f\n", end - begin);
请注意,在clock()
是整数类型的情况下,clock_t
将在除法之前转换为double值以保留信息。
答案 1 :(得分:0)
搜索并进行了大量反复试验后,我可以得出结论,所花费的时间太快了,无法测量。在测试阶段,我最多只有50个节点。
通过引用此网站https://aaronjwood.com/articles/binary-search-trees/,我调整了代码,获得有效遍历时间所需的最小节点数为1,000,000个节点。
因此结论是,要解决C中的这一问题,我们将不得不使用大量节点。