队列的链式存储实现
struct Node
{
ElementType Data;
struct Node* next;
};
struct QNode
{
struct Node* rear;//指向队尾
struct Node* front;//指向队头
};
typedef struct QNode* Queue;
Queue PtrQ;
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/af261fcc8bc90c013aed204e12436270.png)
多项式加法运算
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/345d530c51e4a5cbaa83551ab8ab3a3b.png)
代码实现
//p1,p2分别指向两个多项式的某结点
Polynomial PolyAdd(Polynomial P1,Polynomial P2)
{
Polynomial front,rear,temp;//front,rear分别记录多项式链表头节点和尾节点
int sum;
rear=(Polynomial)malloc(sizeof(struct PolyNode));
front=rear;//都指向一块空结点
while(P1&&P2)//当两个多项式都没有处理完时
switch(Compare(P1->expon,P2->expon))
{
//当p1某项的指数大返回1
case 1:
Attach(P1->coef,P1->expon,&rear);
P1=P1->link;
break;
case -1:
Attach(P2->coef,P2->expon,&rear);
P2=P2->link;
break;
case 0:
sum=P1->ceof+P2->ceof;
Attach(sum,P1->coef,&rear);
P1=P1->link;
P2=P2->link;
break;
}
//将未处理完的另一个多项式的所有节点赋值到多项式中去
for(;P1;P1=P1->link)
Attach(P1->ceof,P1->expon,&rear);
for(;P2;P2=P2->link)
Attach(P2->ceof,P2->expon,&rear);
rear->link=NULL;
temp=front;
front=front->link; /*令front指向结果多项式第一个非零项,因为第一个
结点是空结点的,Attach()只是把算的值挂空结点后*/
free(temp); //释放临时空表头节点
return front;
}
/*注:c语言中没有引用,这里要想修改指针的值,就必须传递指针的地址,
由于Polynomial本身为指针类型,所以此处Polynomial*为一个二级指针*/
void Attach(int c,int e,Polynomial* pRear)
{
Polynomial P;
P=(Polynomial)malloc(sizeof(struct PolyNode));
P->coef=c;
P->expon=e;
P->link=NULL;
(*pRear)->link=P;
*pRear=P; //修改pRear的值
}