gpt4 book ai didi

c - C中双链表的排序

转载 作者:行者123 更新时间:2023-11-30 21:10:17 26 4
gpt4 key购买 nike

我创建了一个程序来按升序对双链表进行排序,结果出乎意料,但是当我通过更改其中的一行来使用相同的程序进行降序排序时,它运行得很好。请告诉我哪里出了问题

/*Structure of double linked list */ 
struct dlink
{
int num;
struct dlink *plink; //previous address
struct dlink *nlink; //next address
};
void main()
{
clrscr();
struct dlink *st;
st=NULL;

append(&st,100); //to put values in double linked list
append(&st,32);
append(&st,200);
append(&st,107);
display(st);
ascending(&st);
display(st);
getch();
}
/* function to add values to double linked list */
void append(struct dlink **q,int n)
{
struct dlink *temp,*r;
temp=*q;

if(temp==NULL)
{
temp=(dlink *)malloc(sizeof(dlink));
temp->num=n;
temp->plink=NULL;
temp->nlink=NULL;
*q=temp;
}
else
{
while(temp->nlink!=NULL)
temp=temp->nlink;
r=(dlink *)malloc(sizeof(dlink));
r->num=n;
r->nlink=NULL;
r->plink=temp;
temp->nlink=r;
}
}


void ascending(struct dlink **q)
{
struct dlink *temp,*s,*p=NULL;
temp=*q;
int a=count(*q);
printf(" a %d ",a);

for(int i=0;i<a;i++,temp=temp->nlink)

{
s=temp->nlink;
for(int j=i+1;j<=a;j++,s=s->nlink)
{
if((temp->num) < (s->num)) //for ascending i was using //if(temp->num > s->num but it is not getting desired result it is just printing //one value and by this one for descending order program is working perfectly //for descending order
{
(s->plink)->nlink=s->nlink;
if(s->nlink!=NULL)
(s->nlink)->plink=s->plink;

s->plink=temp->plink;
s->nlink=temp;
temp=s;
(temp->nlink)->plink=temp;
}
}
if(i==0)
*q=temp;

if(i!=0)
{
p->nlink=temp;
temp->plink=p;
}
p=temp;


}
temp=*q;
/* To see if the addresse , previous address , next address are correct */
while(temp!=NULL)
{
printf("as %u %u %u\n",temp->plink,temp->nlink,temp);
temp=temp->nlink;
}
}

最佳答案

看这部分

int a=count(*q);
for(int i=0; i<a; i++,temp=temp->nlink)
{
s=temp->nlink;
for(int j=i+1; j<=a; j++,s=s->nlink)
{ ....

似乎您正在使用从 0 (第一个循环)到 count(*q) (第二个)的索引来获取包含 count(*g)< 的列表 元素。

您的算法可能有问题 - 即使它不会导致“索引越界”错误(因为您不使用数组)。

当你尝试用第二种方式排序时,它就会出现,因为你没有足够认真地测试第一种方式。

关于c - C中双链表的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30345449/

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