#include<stdio.h>
#include<stdlib.h>
#define NULL 0
typedef struct term {
float base; //底数
int expn; //指数
struct term *next;
}term, *LinkList;//term为一个新类型(是一个结构体),LinkList为指向这样的结构体的指针
typedef LinkList polynomial;
//若有序链表L中存在与项t的指数相等的元素,则指针q指向L中第一个指数为t->expn的节点的位置,
//否则q指向第一个指数满足与t->expn相比>0的节点的前驱位置
bool locateElem(LinkList L, LinkList t, LinkList &q) {
LinkList p1 = L->next;
LinkList p2 = L;//p2总指向p1的前驱
while (p1) {
if (t->expn < p1->expn) {
p1 = p1->next;
p2 = p2->next;
}
else if (t->expn == p1->expn) {
q = p1;
return true;
}
else {//p1->expn > t->expn,因为L是有序表,所以如果程序走到了这一步,说明没找到与项t的指数相等的节点元素
//则返回q的前驱结点
q = p2;
return false;
}
}
if (!p1) {//t->expn比当前列表所有元素的指数都大,则上面的while循环会因为p2到达了尾节点,p1=NULL而跳出
q = p2;
return false;
}
}
// 1. 直接选择排序 ------直接交换数据
void ListSort_1(LinkList head)
{
LinkList p = NULL;
LinkList q = NULL;
LinkList t = NULL;
if (head == NULL || (head)->next == NULL)
{
return;
}
for (p = head; p != NULL; p = p->next)
{
t = p;
for (q = p->next; q != NULL; q = q->next)