多項式鏈結串列
下面的程式碼是用鏈結串列來做多項式加法計算 。
可給使用者輸入係數與冪次,並進行降冪排序與同次相加,最後再將兩個多項式加成一個新的多項式。
正常來說,在輸入多項式P1時,可以任意輸入冪次與係數,在P2時也可以任意輸入,但我的程式發生一個奇怪的問題,P1可以任意輸入,但P2如果輸入數個同次的項就有可能會當機(有些情形不會)。
請教一下各位高手,這種情形是什麼現象?
(因為知識+限定字數,所以這邊只列部分程式碼,其他的程式碼會列在別個問題)
#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
int coef;
int expo;
struct list *next;
}node;
node *new_node,*ptr;
node *build(node *,int ,int,int *);
void sort(node *,int);
void show(node *);
node *add(node *,node *);
int main(void)
{
node *P1_head=NULL,*P2_head=NULL,*P3_head=NULL;
int coef;
int expo;
int count=0;
printf("請輸入Ctrl+Z表示資料輸入結束\n");
printf("請輸入多項式P1係數,冪次\n");
while(scanf("%d %d",&coef,&expo)!=EOF)
P1_head=build(P1_head,coef,expo,&count);
sort(P1_head,count);/* 降冪排列 */
show(P1_head);
printf("請輸入多項式P2係數,冪次\n");
count=0;
while(scanf("%d %d",&coef,&expo)!=EOF)
P2_head=build(P2_head,coef,expo,&count);
sort(P2_head,count);/* 降冪排列 */
show(P2_head);
P3_head=add(P1_head,P2_head);
printf("P1+P2=:");
show(P3_head);
system("pause");
return 0;
}
我覺得問題是出在降冪排序中,遇到同次會合併這個功能上面,因為我將P2的降冪排序拿掉後,就沒事了
To adam!大大 :
node *P1_head=NULL,*P2_head=NULL,*P3_head=NULL;
我有給它NULL呢= ="
1 個解答
- adam!Lv 51 0 年前最佳解答
你好,大略看了一下
應該是add函數裡頭有點問題
你宣告了P3_head,並且動態配置空間給他
沒有問題
但是你忘了,他是初創的前端指標
你記得要給他null
P3_head->next=NULL;
你沒有給他初始的話
又把他帶到 build 函數去
那麼執行此行敘述
for(ptr=head;ptr->next!=NULL;ptr=ptr->next);
就會有些問題了
你先改過,如果還有錯我在看!
2007-03-31 22:24:31 補充:
我是指
在add裡頭的
P3_head!!
2007-03-31 22:26:14 補充:
node *add(node *P1_head,node *P2_head)
{
printf("ADD\n");
node *P3_head;
int count=0;
P3_head=(node *)malloc(sizeof(node));
P3_head->next=NULL; // here!!!!!!!!!!!!!!!
ptr=P3_head;
printf("ADD_OVER\n");
以下略...