匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 1 0 年前

多項式鏈結串列

下面的程式碼是用鏈結串列來做多項式加法計算 。

可給使用者輸入係數與冪次,並進行降冪排序與同次相加,最後再將兩個多項式加成一個新的多項式。

正常來說,在輸入多項式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;

}

2 個已更新項目:

我覺得問題是出在降冪排序中,遇到同次會合併這個功能上面,因為我將P2的降冪排序拿掉後,就沒事了

3 個已更新項目:

To adam!大大 :

node *P1_head=NULL,*P2_head=NULL,*P3_head=NULL;

我有給它NULL呢= ="

1 個解答

評分
  • adam!
    Lv 5
    1 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");

    以下略...

還有問題?馬上發問,尋求解答。