Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 向排序列表中添加元素_C_List_Sorting_Pointers - Fatal编程技术网

C 向排序列表中添加元素

C 向排序列表中添加元素,c,list,sorting,pointers,C,List,Sorting,Pointers,我对列表有一个问题,更具体地说,就是向列表中添加新元素。 此函数用于将新元素添加到已排序列表的适当位置 ListEl* PushFrontsort(ListEl* head, ElType k) { ListEl* x = (ListEl*) malloc(sizeof(ListEl)); x->key = k; x->next = NULL; ListEl* y=head; ListEl* w=head; ListEl* new1 =

我对列表有一个问题,更具体地说,就是向列表中添加新元素。 此函数用于将新元素添加到已排序列表的适当位置

ListEl* PushFrontsort(ListEl* head, ElType k)
{
    ListEl* x = (ListEl*) malloc(sizeof(ListEl));
    x->key = k;
    x->next = NULL;
    ListEl* y=head;
    ListEl* w=head;
    ListEl* new1 = (ListEl*) malloc(sizeof(ListEl));
    new1=head;
    w=w->next;
    if(head->key >= x->key)
    {
        x->next=head;
        new1=x;
    }
    else
    {
        while(w->key < x->key &&w->next)
        {
            y=w;
            w=w->next;
        }
        y->next=x;
        x->next=w;
    }
    return new1;
}
当我尝试使用以下说明添加新的随机元素时:

    int i;
    srand(time(NULL));
    ListEl* head = NULL;
    head = PushFront(head, rand()%100);
    for (i = 0; i < 20; i++)
        head = PushFrontsort(head, rand()%100);
inti;
srand(时间(空));
ListEl*head=NULL;
头部=前推(头部,兰德()%100);
对于(i=0;i<20;i++)
head=PushFrontsort(head,rand()%100);
它不仅有时不增加20个数字并在19处停止,而且经常程序崩溃。 整个问题是,我不知道是什么导致了正确执行的随机性。 如果你能给我任何改进的建议,我将不胜感激。
任何帮助都将不胜感激

只有当对
ListEl
的第二次调用的
key
值大于第一次调用时,才会发生错误。这就是代码失败的原因~%50次,因为这完全取决于随机调用的数字。至于“有时不加20个数字,停在19个”,我不确定为什么会发生这种情况,因为我无法重现这种情况

要解决您的问题,请回答“如果您需要typedeffed类型的指针,请声明一个实例,但请将typedef保留为types,这样就不会屏蔽间接寻址级别。”

因此,如果您将代码更改为:

int i;
srand(time(NULL));
ListEl a = {0, NULL};
ListEl* head = &a; 
head = PushFront(head, rand()%100);
for (i = 0; i < 20; i++)
    head = PushFrontsort(head, rand()%100);

以便区分结构类型和结构类型的实例。老实说,我不太清楚为什么需要这样做,所以如果有更多知识的人可以编辑/插话,请随意。

你有
ElType
的定义吗?忘了写了-ElType只是一个int什么是
PushFront
?ListEl*PushFront(ListEl*head,ElType k){ListEl*w=(ListEl*)malloc(sizeof(ListEl));w->key=k;w->next=head;返回w;//新的head}为什么
PushFrontsort
?您不想要一个
插入\u排序的
?从名称上看,您希望函数做什么有点不清楚(您的解释很清楚)。正确的描述性名称确实有助于可读性。
int i;
srand(time(NULL));
ListEl a = {0, NULL};
ListEl* head = &a; 
head = PushFront(head, rand()%100);
for (i = 0; i < 20; i++)
    head = PushFrontsort(head, rand()%100);
typedef struct _ListEl {
    int key;
    struct _ListEl *next;
} ListEl;