1. 程式人生 > >利用結點資料型別,求兩個一元多項式的和

利用結點資料型別,求兩個一元多項式的和

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct  PNode
{
  int  coef;
  int  exp;
  struct  PNode *next;
}node;


node *CreateP(void)
{
  node *h,*tail,*s;
  int  coef, exp;


  h = (node *)malloc(sizeof(node));
  if (!h)
  {
    exit(-1);
  }
  h->next = NULL;
  tail = h;


  printf("請輸入每一項的係數和指數(中間以逗號隔開):\n");
  printf("coef,exp: ");
  scanf("%d,%d",&coef,&exp);
  while (coef)
  {
    s = (node *)malloc (sizeof(node));
    if (!s)
    {
      exit(-1);
    }
    s->coef = coef;
    s->exp = exp;
    
    s->next = tail->next;
    tail->next = s;
    tail = s; 
    
    printf("ceof,exp: ");
    scanf("%d,%d",&coef,&exp);
  }


  return h;
}


 


void PAdd(node *polya, node *polyb)
{
  node *p, *q, *pre, *temp;
  int  sum = 0;;


  p = polya->next;
  q = polyb->next;
  pre = polya;


  while (p && q)
  {
    if (p->exp < q->exp)
    {
      pre->next = p;
      pre = p;
      p = p->next;
    }
    else if (p->exp > q->exp)
    {
      pre->next = q;
      pre = q;
      q = q->next;
    }
    else
    {
      sum = p->coef + q->coef;
      if (sum)
      {
        p->coef = sum;
        pre->next = p;
        pre = p;
        p = p->next;
  
        temp = q->next;
        free(q);
        q = temp;
      }
      else
      {
        temp = p->next;
        free(p);
        p = temp;


        temp = q->next;
        free(q);
        q = temp;
      }
    }
  }


  pre->next = p?p:q;
}




int Prin(node *h)
{
  node *p = h->next;
  
 
  while(p&&(p->next!=NULL))
  {
    printf("%d*x^%d+",p->coef, p->exp);
 p = p->next;
  }
  if(p->next==NULL)
  printf("%d*x^%d",p->coef, p->exp);
  printf("\n");
  return 1;
}
void main()
{
  node *polya, *polyb;
  printf("請輸入第一個一元多項式的係數和指數(以輸入係數為0來結束):\n");
  polya = CreateP();
  printf("\n");
  printf("請輸入的第一個一元多項式為:\n");
  Prin(polya);
   printf("\n");
  printf("輸入第二個一元多項式的係數和指數(以輸入係數為0來結束):\n");
  polyb = CreateP();
   printf("\n");
  printf("輸入的第二個一元多項式為:\n");
  Prin(polyb);
    printf("\n");
  printf("這兩個一元多項式相加後的多項式C為:\n");
  printf("C=");
  PAdd(polya, polyb);
  Prin(polya);
  fflush(stdin);
  getchar();

}


相關推薦

利用結點資料型別一元多項式

# include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct  PNode {   int  coef;   int  exp;   struct

資料結構:有序列表的交集並集

1.求兩個有序列表的交集 LNode* Intersection(LNode* La,LNode* Lb) { if (La==NULL||Lb==NULL) { return NULL; } LNode *pCHead = NULL; //A與B交集頭 LNode *pCE

資料結構 一元稀疏多項式 利用鏈式儲存實現儲存一元多項式並計算一元多項式之和

一、實驗原理 利用鏈式儲存實現儲存一元多項式,並計算兩個一元多項式之和。一元多項式由係數和指數構成。 1、create()儲存係數指數:首先建立一個頭結點headLnode,從headLnode->next開始存入係數和指數,只有係數是0時,才表示這個多項式的結束,否

線性表的抽象資料型別陣列的並集

1.operation     InitList(*L):初始化操作,建立一個空的線性表L.      ListEmpty(L):判斷線性表是否為空表,若為空,則返回true,否則返回false。     

寫一個函式整數之和要求在函式體內不得使用+、-、*、/四則運算子號

思路:首先看十進位制是如何做的: 5+7=12,三步走第一步:相加各位的值,不算進位,得到2。第二步:計算進位值,得到10. 如果這一步的進位值為0,那麼第一步得到的值就是最終結果。第三步:重複上述兩步,只是相加的值變成上述兩步的得到的結果2和10,得到12。同樣我們可以用三

從主檔案中讀取n個子資料夾中的圖片(每一子檔案中有資料檔案中有18張圖片)

tic clc; clear all; close all; str = 'F:\shijie-test\test-finger\'; pt = dir(str); foldname = []; k = 0; for i = 1 : length(pt)     ifstr

程式設計題:給定集合集合的交集

題目:給定兩個整數集合,求兩個集合的交集。 法一:排序法(先將集合排序,在找交集)             排序時間複雜度O(nlogn),對集合遍歷查詢O(n);總的時間複雜度O(nlogn); void main() { int a[] = { 1, 5, 9, 8,

題目:寫一個函式整數之和要求在函式體內不得適用+-* ./ 四則運算子號

題目:寫一個函式,求兩個整數之和,要求在函式體內不得適用+,-,* ,./  四則運算子號     面試的時候被問道這個問題,首先我們分析人們是如何進行十進位制的加法的,比如如何得出5+17=22這個結果的,實際上,我們可以分三步進行:第一步只做各位相加不進

python面試題List各個元素相減絕對值最小是多少

春暖花開,人心浮動,吾思當左遷之,一則工資上漲,二則環境變好。奈何世道不然,吹牛空談者大受歡迎,而吾實事求是者則落寞如此,知之為知之,不知為不知。 投遞無數,才得一二,某國有電信公司邀請面試,始記得吾曾於去年三月去過,現復一年又至三月,碰運氣吧! 約至午後兩點,前臺等候,看

C語言實現整數mn的二進位制序列中有多少不同的位

新手學程式設計,大佬寫的太高深,看看本人小白寫的,一起學習一起交流 #include <stdio.h> int main() { int m = 0; int n = 0; int i = 0; int count = 0; scanf("%d%d", &

LINUX Shell 下檔案交集差集的辦法

轉載自https://blog.csdn.net/autofei/article/details/6579320 假設兩個檔案FILE1和FILE2用集合A和B表示,FILE1內容如下: a b c e d a FILE2內容如下:  c d

C語言程式設計複數的

#include <stdio.h> #include <stdlib.h> /* 1.程式設計求兩個複數的和 結構體 函式 返回值是結構體 引數 兩個結構體 */ struct Complex { int x; int y; }; stru

jzxx1029自然數MN的最大公約數

題目描述 求兩個自然數M和N的最大公約數(M,N都在長整型範圍內) 輸入 輸入一行,包括兩個整數. 輸出 輸出只有一行(這意味著末尾有一個回車符號),包括1個整數。 樣例輸入 45 60 樣例輸出 15 滿分程式碼: #include <bits/stdc

程式設計求解輸入整數nm,從數列1,2,3……n中隨意取幾個數使其等於m。要求將所有的可能組合列出來(揹包問題求解) .

程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。實際上就是一個揹包問題。 求解思路: 1.首先判斷,如果n>m,則n中大於m的數不可能參與組合,此時置n = m; 2.將最大數n加入且n == m,則

java字元AB最大的相同字串

private static ArrayList getMaxSubString(String s1,String s2){ //最大相同子串,s1,s2=min String max=(s1.length()>s2.length())?s1:s2; String min=(m

我們認為2是第一素數3是第二素數5是第三素數依次類推。 現在給定整數nm0

我們認為2是第一個素數,3是第二個素數,5是第三個素數,依次類推。 現在,給定兩個整數n和m,0<n<=m<=200,你的程式要計算第n個素數到第m個素數之間所有的素數的和,包括第n個素數和第m個素數。 /*我們認為2是第一個素數,3是第二個素數,5

一元多項式相加

程式執行結果如下:<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"># include<stdio.h></

一元多項式相加(連結串列 || 順序表實現)

順序表實現: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <map> using

利用sortuniq文件的並集交集差集

sort uniq  利用sort和uniq求兩個文件的並集,交集和差集  並集:cat file1.txt file2.txt | sort | uniq > file.txt  交集:cat file1.txt file2.txt | sort | uniq -d >file.txt