C ++程序崩溃(超出时间限制)

时间:2017-03-15 20:42:24

标签: c++ list

这是完整的代码。如果在插入元素的主要部分中,我们运行循环的次数少于30次,则运行。否则它没有。程序崩溃并给出错误“在线编译器超出时间限制”。我想看到插入到数组列表中的所有100个随机元素的输出。但程序因为不明原因而崩溃了。

这是主要的

int main()
{
    node* a[100],*b,*temp,*temp2;
    int num;
    for(int i=0;i<100;i++)
    {    
        a[i]=NULL;;
    }
    for(int i=0;i<100;i++) // If this loop is less than 30 , it runs
    {
        num=(1+ (rand() %100) );

        insert_node(a,num);
    }
    display(a);
}

这是插入功能

void insert_node(node **q,int data)
{
    node *temp,*temp2;
    int pos;
    pos=hash_function(data);
    if(q[pos]==NULL)
    {
        temp=new node;
        temp->next=NULL;
       temp->data=data;
       q[pos]=temp;
    }
    else
    {
        temp2=q[pos];
        while(temp2->next != NULL )
        {
            temp2=q[pos];
            temp2=temp2->next;
        }
        temp=new node;
        temp->next=NULL;
        temp->data=data;
        temp2->next=temp;
    }
}

这是noobie哈希函数。

int hash_function(int data)
{
    return 1+(rand() %100);
}

这是显示一个

void display(node **q)
{
    node * temp;
    for(int i=0;i<100;i++)
    {
            temp=q[i];
            if(temp !=NULL)
        {

            cout<<"\n Position : "<<i<<" , Elements : ";
            while(temp->next != NULL)
            {
                cout<<" "<<temp->data;
                temp=temp->next;
            }
            cout<<" "<<temp->data;
        }
    }


}
PS:请不要判断我对哈希的尝试。真的是一个菜鸟程序员。谢谢你的推荐。

1 个答案:

答案 0 :(得分:2)

这里有一个无限循环:

    temp2=q[pos];
    while(temp2->next != NULL )
    {
        temp2=q[pos];
        temp2=temp2->next;
    }

每次循环播放都会将temp2设置回q[pos],然后再转到下一个。所以你永远不会超过链表的第二个元素,它永远不会找到NULL指针。

摆脱循环中的temp=q[pos];行,它应该在循环之前完成一次。

另一个问题是数组索引是从零开始的,因此在计算哈希码时不应添加1

int hash_function(int data)
{
    return (rand() %100);
}

DEMO