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;