用c语言链表编写便利店零售系统,链表实现多项式求和(C语言)
鏈表實(shí)現(xiàn)多項(xiàng)式求和(C語言)0
aebgt2013.06.26瀏覽270次分享舉報(bào)
1 多項(xiàng)式求和中兩個(gè)鏈表合并問題,請各位大俠幫忙啊
#include
#include
typedef struct node
{
float coef;
int exp;
struct node *next;
}link,*linklist;
linklist creatployn ()
{
linklist head,temp,now;
temp=now=(linklist)malloc(sizeof(link));
printf("請輸入該項(xiàng)系數(shù)和指數(shù):\n");
scanf("%f,%d",&temp->coef,&temp->exp);
temp->next=NULL;
if (temp->coef==0.0||temp->exp<0)
{
head=NULL;
free(now);
}
else head=now;
while (temp->coef!=0.0&&temp->exp>=0)//
{
now->next=temp;
now=temp;
temp=(linklist)malloc(sizeof(link));
printf("請輸入該項(xiàng)系數(shù)和指數(shù):\n");
scanf("%f,%d",&temp->coef,&temp->exp);
}
free(temp);
now->next=NULL;
return(head);
}
void printployn(linklist head)
{
linklist p=head;
int n=1;
printf("該表達(dá)式為:\n");
if(p==NULL)
return;
while(p!=NULL)
{
if(n==1) {printf("%fX^%d",p->coef,p->exp); n++;}
else printf("+%fX^%d",p->coef,p->exp);
p=p->next;
}
}
int compare(int x,int y) //比較兩個(gè)多項(xiàng)式的指數(shù)
{
if(x
else if(x=y) return 0;
else return 1;
}
linklist addployn(linklist la,linklist lb) //兩個(gè)多項(xiàng)式的合并(此處在la表上與lb表對應(yīng)元素作比較,做出響應(yīng)的添加刪除操作,最后返回la)
{
linklist head,temp=(linklist)malloc(sizeof(link)),qa=la,qb=lb,tempa,tempb;
head=temp;
temp->next=NULL;
int a,b;
while(qa&&qb)
{
a=qa->exp; b=qb->exp;
switch (compare(a,b))
{
case -1:
temp->next=qa; temp=qa; qa=qa->next;break;//將la表的結(jié)點(diǎn)作為當(dāng)前結(jié)點(diǎn),并將la指向la表當(dāng)前結(jié)點(diǎn)的下一結(jié)點(diǎn)
case 0: //合并指數(shù)相同的項(xiàng)
qa->coef+=qb->coef; //系數(shù)相加
if(qa->coef!=0) //系數(shù)不為零,將la表的結(jié)點(diǎn)作為當(dāng)前結(jié)點(diǎn),并釋放lb表結(jié)點(diǎn),再分別讓qa,qb指向各自的下一結(jié)點(diǎn)
{
temp->next=qa;//
temp=qa;
qa=qa->next;
}
else //系數(shù)為零將當(dāng)前l(fā)a,lb表重的結(jié)點(diǎn)釋放,并指向各自的下一點(diǎn)
{
tempa=qa;
qa=qa->next;
free(tempa);
}
tempb=qb; qb=qb->next; free(tempb);
break;
case 1:
temp->next=qb; temp=qb; qb=qb->next; //將lb表結(jié)點(diǎn)插入la表作為當(dāng)前結(jié)點(diǎn),并使qb指向下一結(jié)點(diǎn)
break;
}
}
if(qa) temp->next=qa;
else temp->next=qb;
tempa=head;
head=head->next;
free(tempa);
return(head);
}
void main()
{
linklist LA=creatployn();
printployn(LA);
linklist LB=creatployn();
printployn(LB);
linklist LC=addployn(LA,LB);
printployn(LC);
}
基本思路是按指數(shù)從小到大輸入系數(shù)和指數(shù),到0,0結(jié)束該多項(xiàng)式輸入。求和部分,不引入新表,而在原來的a表上將b表元素進(jìn)行插入和刪除的操作。
我對鏈表操作概念很不清楚。在求和函數(shù)中的temp必須要給他申請空間么?我最初就把temp設(shè)成普通指針變量,通過移動(dòng)他的位置來指向當(dāng)前結(jié)點(diǎn),但是好像鏈表一點(diǎn)都沒鏈起來。麻煩哪位好心人能幫我詳細(xì)解釋一下這個(gè)鏈接的過程啊:)不勝感激啊!
講的詳細(xì)我追加分?jǐn)?shù)!關(guān)于鏈表的問題已經(jīng)困擾我很久了。期待高人點(diǎn)撥迷津~~~
總結(jié)
以上是生活随笔為你收集整理的用c语言链表编写便利店零售系统,链表实现多项式求和(C语言)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单片机控制lcd序c语言,51单片机驱动
- 下一篇: c语言 get post请求,URL G