隨筆 - 251  文章 - 504  trackbacks - 0
          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

          留言簿(14)

          隨筆分類

          收藏夾

          My Favorite Web Sites

          名Bloger

          非著名Bloger

          搜索

          •  

          積分與排名

          • 積分 - 204397
          • 排名 - 283

          最新評論

          要求:
          1? 輸入并建立多項式
          2? 輸出多項式,輸出形式外為整數序列:c1,e1;c2,e2;.......cn,en;其中n為多項式的項數,ci和ei分別為第i項的系數和指數,序列按指數降序排列
          3? 多項式a和b相加,建立多項式a+b
          4? 多項式a和b相減,建立多項式a-b
          代碼如下:
          #include<stdio.h>
          #include<malloc.h>
          #define MAX 20? //多項式最多項數
          typedef struct? //定義存放多項式的數組類型
          {
          ? float coef;?? //系數
          ? int exp;????? //指數
          }PolyArray[MAX];
          typedef struct pnode? //定義單鏈表結點類型
          {
          ? float coef;???????? //系數
          ? int exp;??????????? //指數
          ? struct pnode *next;
          }PolyNode;

          void DispPoly(PolyNode *L)? //輸出多項式
          {
          ?PolyNode *p=L->next;
          ?while (p!=NULL)
          ?{
          ? printf("%g,%d;",p->coef,p->exp);
          ? p=p->next;
          ?}
          ?printf("\n");
          }
          void CreateListR(PolyNode * &L,PolyArray a,int n)??? //尾插入法建表
          {
          ?PolyNode *s,*r;int i;
          ?L=(PolyNode *)malloc(sizeof(PolyNode));????????? //創建頭結點
          ?L->next=NULL;
          //?L->exp=n;
          // printf("%d\n",L->exp);
          ?r=L;??????????????????????????????????????????? //r始終指向終端結點,開始時指向頭結點
          ??for(i=0;i<n;i++)
          ??{
          ??? s=(PolyNode *)malloc(sizeof(PolyNode));?? //創建新結點
          ??? s->coef=a[i].coef;
          ??? s->exp=a[i].exp;
          ??? r->next=s;?????????????????????????????? //將*s插入*r之后
          ??? r=s;
          ??}
          ??r->next=NULL;?????????????????????????????? //將終端結點next域置為NULL
          }
          void Sort(PolyNode * &head)???????????????????????? //按exp域的值遞減排序
          {
          ? PolyNode *p=head->next,*q,*r;
          ? if(p!=NULL)????????????????????????????????????? //當原單鏈表不為空時
          ? {
          ?? r=p->next;???????????????????????????????????? //r保存*p結點后繼結點的指針
          ?? p->next=NULL;????????????????????????????????? //構造只含一個數據結點的有序表
          ?? p=r;
          ?? while(p!=NULL)
          ?? {
          ???? r=p->next;?????????????????????????????????? //r保存*p結點后繼結點的指針
          ? q=head;
          ? while(q->next!=NULL && q->next->exp>p->exp)
          ?? q=q->next;?????????????????????????????? //在有序表中找插入*p的前驅結點*q
          ? p->next=q->next;???????????????????????????? //將*p插入到*q之后
          ? q->next=p;
          ? p=r;
          ?? }
          ? }
          }
          void Add(PolyNode *ha,PolyNode *hb,PolyNode *&hc)//求兩個有序表的并
          {
          ? PolyNode *pa=ha->next,*pb=hb->next,*s,*tc;
          ? float c;
          ? hc=(PolyNode *)malloc(sizeof(PolyNode));?????????? //創建頭結點
          ? tc=hc;
          ? while(pa!=NULL && pb!=NULL)
          ? {
          ??? if(pa->exp>pb->exp)
          ?{
          ?? s=(PolyNode *)malloc(sizeof(PolyNode));??????? //復制結點
          ?? s->exp=pa->exp;s->coef=pa->coef;
          ?? tc->next=s;tc=s;
          ?? pa=pa->next;
          ?}
          ?else if(pa->exp<pb->exp)
          ?{
          ? s=(PolyNode *)malloc(sizeof(PolyNode));?????????? //復制結點
          ? s->exp=pb->exp;s->coef=pb->coef;
          ? tc->next=s;tc=s;
          ? pb=pb->next;
          ?}
          ?else???????????????????????????????????????????? //pa->exp=pb->exp時
          ?{
          ?c=pa->coef+pb->coef;
          ?if(c!=0)????????????????????????????????????????? //系數之和不為0時創建新結點
          ?{
          ?? s=(PolyNode *)malloc(sizeof(PolyNode));???
          ?? s->exp=pa->exp;s->coef=c;
          ?? tc->next=s;tc=s;
          ?}
          ?pa=pa->next;
          ?pb=pb->next;
          ?}

          ? }
          ? if(pb!=NULL)???????????????????????????????????? //復制余下結點
          ?? pa=pb;
          ? while(pa!=NULL)
          ? {
          ??? s=(PolyNode *)malloc(sizeof(PolyNode));?????????? //復制結點
          ?s->exp=pa->exp;s->coef=pa->coef;
          ?tc->next=s;tc=s;
          ?pa=pa->next;
          ? }
          ? tc->next=NULL;
          }

          void Subs(PolyNode *ha,PolyNode *hb,PolyNode *&hc)?? //求兩個有序表的差
          {
          ? PolyNode *pa=ha->next,*pb=hb->next,*s,*tc;
          ? float c;
          ? hc=(PolyNode *)malloc(sizeof(PolyNode));?????????? //創建頭結點
          ? tc=hc;
          ? while(pa!=NULL && pb!=NULL)
          ? {
          ??? if(pa->exp>pb->exp)
          ?{
          ?? s=(PolyNode *)malloc(sizeof(PolyNode));??????? //復制結點
          ?? s->exp=pa->exp;s->coef=pa->coef;
          ?? tc->next=s;tc=s;
          ?? pa=pa->next;
          ?}
          ?else if(pa->exp<pb->exp)
          ?{
          ? s=(PolyNode *)malloc(sizeof(PolyNode));?????????? //復制結點
          ? s->exp=pb->exp;s->coef=-pb->coef;???????????????? //如果前個多項式中的指數小于后個多項式指數加上負號
          ? tc->next=s;tc=s;
          ? pb=pb->next;
          ?}
          ?else???????????????????????????????????????????? //pa->exp=pb->exp時
          ?{
          ?c=pa->coef-pb->coef;
          ?if(c!=0)????????????????????????????????????????? //系數之差不為0時創建新結點
          ?{
          ?? s=(PolyNode *)malloc(sizeof(PolyNode));???
          ?? s->exp=pa->exp;s->coef=c;
          ?? tc->next=s;tc=s;
          ?}
          ?pa=pa->next;
          ?pb=pb->next;
          ?}

          ? }
          ? if(pb!=NULL)???????????????????????????????????? //復制余下結點
          ?? pa=pb;
          ? while(pa!=NULL)
          ? {
          ??? s=(PolyNode *)malloc(sizeof(PolyNode));?????????? //復制結點
          ?s->exp=pa->exp;s->coef=pa->coef;
          ?tc->next=s;tc=s;
          ?pa=pa->next;
          ? }
          ? tc->next=NULL;
          }
          void main()
          {
          ?? PolyNode *ha,*hb,*hc;
          ?? //PolyArray a={{1.2,0},{2.5,1},{3.2,3},{-2.5,5}};
          ?? //PolyArray b={{-1.2,0},{2.5,1},{3.2,3},{2.5,5},{5.4,10}};
          ?? int m=4,n=5;
          ?? PolyArray a,b;
          ?? for(int i=0;i<m;i++)
          ?? {
          ???? printf("請輸入A多項式中第%d項的系數和指數",i);
          ? scanf("%f%d",&a[i].coef,&a[i].exp);
          ?? }
          ?
          ??? for(int j=0;j<n;j++)
          ?? {
          ???? printf("請輸入B多項式中第%d項的系數和指數",j);
          ? scanf("%f%d",&b[j].coef,&b[j].exp);
          ?? }

          ?? CreateListR(ha,a,4);
          ?? CreateListR(hb,b,5);
          ?? printf("原來A:\n");DispPoly(ha);
          ?? printf("原來B:\n");DispPoly(hb);

          ?? Sort(ha);
          ?? Sort(hb);
          ?? printf("排序后A:\n");DispPoly(ha);
          ?? printf("排序后B:\n");DispPoly(hb);

          ?? Add(ha,hb,hc);
          ?? printf("相加后:\n");DispPoly(hc);
          ?? Subs(ha,hb,hc);
          ?? printf("相減后:\n");DispPoly(hc);
          }

          posted on 2006-10-04 16:18 matthew 閱讀(4429) 評論(5)  編輯  收藏 所屬分類: 數據結構與算法設計

          FeedBack:
          # re: 數據結構之線性表- 一元稀疏多項式計算器 2007-01-10 10:14 學生
          是代碼啊,可惜不是程序!  回復  更多評論
            
          # re: 數據結構之線性表- 一元稀疏多項式計算器[未登錄] 2007-06-06 18:05 呵呵
          謝謝了大哥  回復  更多評論
            
          # re: 數據結構之線性表- 一元稀疏多項式計算器 2007-12-21 10:32 紅源
          一定要謝謝你,本公子是菜鳥,數據結構不及格,真是郁悶呀,謝謝大俠啦,我一定好好研究的,絕不是照抄  回復  更多評論
            
          # re: 數據結構之線性表- 一元稀疏多項式計算器[未登錄] 2008-03-30 14:49 Alec
          狂頂你................................  回復  更多評論
            
          # re: 數據結構之線性表- 一元稀疏多項式計算器 2008-11-18 22:06 煩死數據結構
          好感動 嗚嗚TT
          終于讓我找到了
          我會好好看滴
          謝謝  回復  更多評論
            
          主站蜘蛛池模板: 宜兰县| 宿迁市| 姜堰市| 聊城市| 开鲁县| 读书| 南陵县| 和龙市| 扎囊县| 天台县| 砀山县| 胶南市| 黔东| 方正县| 定南县| 衢州市| 周宁县| 宁乡县| 荆州市| 禹城市| 南通市| 南江县| 旌德县| 西吉县| 崇阳县| 祁连县| 香格里拉县| 威远县| 镇平县| 天镇县| 大理市| 高平市| 淮滨县| 西充县| 涞源县| 大余县| 武城县| 长岛县| 东莞市| 孟连| 红河县|