C语言单链表:这是一个将链表元素进行升序排列的函数,算法是我自己想出来的,具体的思路是:创建一个新链表,找到原链表中数据域最小的结点插入新链表中,再在原链表中将该结点删除。重复上述步骤,直到原链表为空则停止操作,此时的新链表为升序排列的链表。但将这个思路转化为程序时,不知道哪错了。请各位小伙伴帮忙看看,谢谢!
```c
void sort(polynomial* L)//排序函数
{
polynomial* NewL = (polynomial*)malloc(sizeof(polynomial));
polynomial* np = NewL;
polynomial* r = NULL;
polynomial* s = NULL;
while (1)
{
polynomial* q = L;
polynomial* p = L->next;
if (!p)
break;
double min = p->coef;
r = q;
s = p;
while (p)//找到多项式中系数最小的项
{
if (p->coef < min)
{
min = p->coef;
r = q;
s = p;
}
p = p->next;
q = q->next;
}
r->next = s->next;//将链表中系数最小的项删除
np->next = s;//将链表中系数最小的项插入新链表的表尾
np = np->next;//将新链表的尾指针后移一位
}
np->next = NULL;
L = NewL;
}
```
报错信息发一下
修改如下,改动处见注释,供参考:
void sort(polynomial* L)//排序函数
{
polynomial* NewL = (polynomial*)malloc(sizeof(polynomial));
polynomial* np = NewL;
polynomial* r = NULL;
polynomial* s = NULL;
while (1)
{
polynomial* q = L;
polynomial* p = L->next;
if (!p) break;
double min = p->coef;
r = q;
s = p;
while (p)//找到多项式中系数最小的项
{
if (p->coef < min)
{
min = p->coef;
r = q;
s = p;
}
q = p;//q = q->next; 修改
p = p->next;
}
r->next = s->next; //将链表中系数最小的项删除
s->next = NULL;//修改
np->next = s; //将链表中系数最小的项插入新链表的表尾
np = s; //np = np->next; 修改
}
//np->next = NULL; 修改
L->next = NewL->next; // L = NewL; 修改
free(NewL); //修改
}
不知道你这个问题是否已经解决, 如果还没有解决的话:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
在这里要注意:
首先看一下定义:
-> :->是C语言和C++语言的一个运算符,叫做指向结构体成员运算符,用处是使用一个指向结构体或对象的指针访问其内成员。. 并不是一个运算符,它只是一个断点符号,它指向的是结构体或者对象。
-> 是通过一个结构体或对象指针来访问他们的内部成员变量;
.是直接通过结构体或对象来访问他们的内部成员变量。
a->b读作a指向结构体的b
a.b读作a的b