【发布时间】:2018-09-10 17:51:47
【问题描述】:
我有一个 splitter=5,我想通过 splitter 对单链表的数据进行排序。喜欢
"list_1" -> 存放小于 5 的数据
"list_2" -> 保存等于 5 的数据
"list_3" -> 保存大于 5 的数据
但是在调用 sort 函数时它会退出而没有任何错误。
nodal *sort(nodal *start)
{
struct node *ptr;
ptr=start;
while(ptr!=NULL)
{
if(ptr->data<splitter)
{
start_1=insert_end(start_1,ptr->data);
}
else if(ptr->data==splitter)
{
start_2=insert_end(start_2,ptr->data);
}
else
{
start_3=insert_end(start_3,ptr->data);
}
}
return start;
}
nodal *insert_end(nodal *start,int num)
{
nodal *new_node,*ptr;
new_node = (nodal *)malloc(sizeof(nodal));
new_node->data=num;
if(start==NULL)
{
new_node->next=NULL;
start=new_node;
}
else
{
new_node->next=NULL;
ptr = start;
while (ptr!= NULL)
{
ptr=ptr->next;
}
ptr->next=new_node;
}
return start;
}
我的函数调用
int main()
{
int options;
do
{
printf("\n 1.Create node");
printf("\n 6.Display");
printf("\n 3.Display Sorted");
printf("\n 4.Sort the given list");
printf("\n Enter you choice \n");
scanf("%d",&options);
switch (options)
{
case 1:
start = create(start);
break;
case 2:
display(start);
break;
case 3:
start = display_sorted(start_1,start_2,start_3);
break;
case 4:
start = sort(start);
break;
default:
break;
}
}while(options!=13);
}
【问题讨论】:
-
你能提供你输入的例子吗?你也在使用全局变量吗?重要的是,还要提供调用排序函数的上下文,因为您可能会传递一个空指针来开始。
-
@AJD 输入是 int 值。是的,我正在使用全局变量 splitter=5。我正在调用像 start=sort(start) 这样的排序函数。并且 start 被全局声明为节点 *start = NULL ;节点 *start_2 = NULL ;节点 *start_1 = NULL ;节点 *start_3 = NULL ;
-
printf("\n 6.Display");->printf("\n 2.Display"); -
@shobhit:将这些详细信息添加到您的问题将有助于未来的答案。干杯。
-
这只是拼写错误@4386427 我自己叫它2。
标签: c sorting data-structures singly-linked-list