gpt4 book ai didi

c - 这种在c中使用链表代码的插入排序有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:05 24 4
gpt4 key购买 nike

执行此操作时出现错误。编译器不会给出任何错误,但在执行时会给出随机输出。

我正在做的是从用户那里获取输入并将它们存储到链表中,然后实现插入排序。(我可以调用子程序插入排序,所以我猜问题只出在子程序中)

#include<stdio.h>
#include<stdlib.h>

struct node
{
int info;
struct node *next;
};
typedef struct node *NODEPTR;

NODEPTR getnode();
NODEPTR insertionSortLinkedList(NODEPTR head);

int main()
{
int i,n,temp;
NODEPTR head,lptr,prevlptr;
printf("No of input integers to be sorted\n");
scanf("%d",&n);
if (n<2){printf("n should be atleast 2 \n");return 0;}
printf("\nType space-separated array of %d integers\n",n);
scanf("%d",&temp);

head=getnode();
head->info=temp;
head->next=NULL;
prevlptr=head;
for (i=0;i<n-1;i++)
{
scanf("%d",&temp);
lptr=getnode();
lptr->info=temp;
prevlptr->next=lptr;
lptr->next=NULL;
prevlptr=lptr;
}

head=insertionSortLinkedList(head);

lptr=head;
while(lptr!=NULL)
{
printf("%d ",lptr->info);
prevlptr=lptr;
lptr=lptr->next;
free(prevlptr);
}

return 0;
}


NODEPTR getnode()
{
NODEPTR p;
p=(struct node*)malloc(sizeof(struct node));
return p;
}



NODEPTR insertionSort(NODEPTR head)
{
NODEPTR listptr,tempptr,prevptr,prevtempptr;
prevptr=head;
listptr=prevptr->next;
while(listptr!=NULL)
{
while (listptr->info < prevptr->info)
{
prevptr->next=listptr->next;
tempptr=head;
prevtempptr=head;
while(tempptr->info <= listptr->info)
{
prevtempptr=tempptr;
tempptr=tempptr->next;
}
if(tempptr->info == prevtempptr->info)
{
listptr->next=head;
head=listptr;
}
else
{e
listptr->next=prevtempptr->next;
prevtempptr->next=listptr;
}
listptr=prevptr->next;
if (listptr==NULL)
break;
}
prevptr=prevptr->next;
if (prevptr=NULL)
break;
listptr=prevptr->next;
}
return(head);
}

我的代码有什么问题,我该如何解决?

最佳答案

第6行表格最后

if (prevptr=NULL)

应该是

if (prevptr==NULL)

单个“=”进行赋值而不是比较。

关于c - 这种在c中使用链表代码的插入排序有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19065198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com