数据结构不是听会的,也不是看会的,是练会的,对于写这么长的代码还是心有余也力不足啊,对于指针的一些操作,也还是不熟练,总出现一些异常错误,对于数据结构掌握还是不够啊,还是要多练,这个课程设计做的还是有点粗糙,还有待改进啊!!
对代码有进行了一下改进,增加了排序的模块;可能还存在着一下小bug,发现了再更新:减法还可以写的更简便一点。
<pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>/*屏幕操作函数库*/
using namespace std;
struct node //结构体储存系数和指数
{
float coef; //系数
int expn; //指数
};
typedef node polynomial; // 创建一个多项式的节点
struct Lnode// 储存数据,指针域
{
polynomial data;
Lnode *next;
};
typedef Lnode Link; // 链表的数据类型
void CreatPolyn(Link *L,int n) //创建多项式
{
Link *q; //创建一个新的节点
for(int i=1;i<=n;i++)
{
q=(Link*)malloc(sizeof(Link));
q->next=NULL;
printf("输入第%d项的系数和指数:\n",i);
scanf("%f%d",&q->data.coef,&q->data.expn);
L->next=q;
L=L->next; //把节点链到多项式中
}
}
void DestoryPolyn(Link *L)// 销毁多项式
{
Link *p;
p=L->next;
while(p!=NULL)
{
L->next=p->next;
free(p);//释放节点的内存
p=L->next;
}
free(p);
}
void PrintPolyn(Link *L) //打印多项式
{
Link *p;
if(L==NULL||L->next==NULL) //多项式为空的情况
cout<<"该一元多项式为空!"<<endl;
else
{
p=L->next;
while(p!=NULL)
{
if((p->data).coef>0)//多项式的系数大于0的五种情况
{
if((p->data).expn==0)
cout<<(p->data).coef;
else if((p->data).coef==1&&(p->data).expn==1)
cout<<"x";
else if((p->data).coef==1&&(p->data).expn!=1)
cout<<"x^"<<(p->data).expn;
else if((p->data).expn==1&&(p->data).coef!=1)
cout<<(p->data).coef<<"x";
else
cout<<(p->data).coef<<"x^"<<(p->data).expn;
}
if((p->data).coef<0)//多项式的系数小于0的五种情况
{
if((p->data).expn==0)
cout<<(p->data).coef;
else if((p->data).coef==-1&&(p->data).expn==1)
cout<<"-x";
else if((p->data).coef==-1&&(p->data).expn!=1)
cout<<"-x^"<<p->data.expn;
else if((p->data).expn==1)
cout<<(p->data).coef<<"x";
else
cout<<(p->data).coef<<"x^"<<(p->data).expn;
}
if(p->next!=NULL&&(p->next->data).coef>0&&p->data.coef!=0)
cout<<"+";
p=p->next;
}
}
cout<<endl;
}
void S