使用c中的链接列表代码进行的插入排序有什么问题?

用户名

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

我在做什么是从用户那里获取输入并将其存储到链表中,然后实现插入排序。(我可以调用子例程插入排序,因此我猜问题仅在子例程内)

#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);
}

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

姆克赫达瓦

第六行表格最后

if (prevptr=NULL)

它应该是

if (prevptr==NULL)

单“ =”执行分配而不是比较。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章