一元多项式的错误,大神帮我看看

零晨三点 发布于 2018/11/07 10:25
阅读 178
收藏 1

#include<stdio.h>
#include<stdlib.h>


struct Node
{
  float coef;
  int expn;
  struct Node *next;
};
typedef struct Node ListNode;
typedef struct Node* LinkNode;

/*创建单链表*/
ListNode *CreatList(int n)
{
 ListNode *head;
 ListNode *p,*pre;
 int i,expn;float coef;
 
 head=(ListNode *)malloc(sizeof(ListNode));//为头节点分配内存空间
 head->next=NULL;//将头结点的指针域清空
 pre=head;//先将头结点首地址赋给中间变量pre
 for(i=1;i<=n;i++)//通过for循环不断加入新的结点
  {
   p=(ListNode *)malloc(sizeof(ListNode));//为要插入的节点分配
   //内存空间p指向新插入结点的首地址
   p->expn=expn;
   p->coef=coef;
   pre->next=p;//将p指向新结点插入链表也就是头结点指针域指向下个结点
   pre=p;//这个起着指向下一个结点的作用
  }
 p->next=NULL;//最后将最后一个结点的指针域清空了
 return head;//返回这个链表的首地址
}
/*插入节点*/
int InsertList(ListNode *h,int i,float coef,int expn)
{
 int j=0;
 ListNode *p; ListNode *s;
 p=h; p=p->next;
 while(p&&j<i-1)
 {
  p=p->next;
  ++j;
 }
 if(!p||j>i-1) return 0;
// s=(ListNode *)malloc(sizeof(ListNode));
 
    p->expn=expn;
    p->coef=coef;
  
// s->next=p->next;
// p->next=s;
 return 1;
}
/*打印链表*/
void PrintListNode(ListNode *m){
 ListNode *p;
 p=m->next;

 for(;p!=NULL;){
  printf("%.1fX^%d",p->coef,p->expn);
  if(p->next!=NULL)
  printf("+");
  p=p->next;
  }
 printf("\n"); 
}

/*多项式相加*/

void AddList(ListNode *h,ListNode *H,ListNode *h1){
 ListNode *pa,*pb,*pc;
 pa=h,pb=H,pc=h1;
 
 for(int i=1;pa->next==NULL&&pb->next==NULL;pa=pa->next,pb=pb->next)
  {
   pc->coef=pa->coef ;
   pc->expn=pa->expn;
   InsertList(pc,i,pc->coef,pc->expn);
   pc=pc->next;
   i++;
   pc->coef=pb->coef ;
   pc->expn=pb->expn;
   InsertList(pc,i,pc->coef,pc->expn);
   pc=pc->next;
   i++;
  }
 int main()
{
  ListNode *h;//h指向结构体NODE
    int n=3, expn,coef;
   
    h=CreatList(n);/*创建链表*/
  coef=2;expn=1;
 InsertList(h,1,coef,expn);//插入链表
  coef=2;expn=5;
 InsertList(h,2,coef,expn);
  coef=3;expn=4;
 InsertList(h,3,coef,expn);
  printf("L1="); 
    PrintListNode(h);
   
      ListNode *H;//h指向结构体NODE
   
    H=CreatList(n);/*创建链表*/
  coef=2;expn=10;
 InsertList(H,1,coef,expn);//插入链表
  coef=8;expn=5;
 InsertList(H,2,coef,expn);
  coef=9;expn=1;
 InsertList(H,3,coef,expn); 
  printf("L2=");
    PrintListNode(H);
 
 ListNode *L;
 n=6;
 L=CreatList(n);
  AddList(h,H,L);
}

 

加载中
0
tcxu
tcxu
  1. 创建(creat) linked list, 只需建立一个头节点就行了,不必规定节点的个数。
  2. 链表的优点就是初始化不要限制/规定长度。相应地,插入(insert)函数也应当重新写 (建议按幂的大小插入, 以便利以后的查询、相加)。
  3. 多项式相加,不是简单地将两个已知链表的节点依次插入第三个链表。而是将两个已知链表幂次相同项的(浮点数)系数相加,组成一个新结点,之后,将新结点插入第三个链表。
  4. 目前看来,多项式相加的函数末尾少了一个表示函数定义结束的花括号:

                        void AddList(ListNode *h,ListNode *H,ListNode *h1){ ...  缺表示结束的 '}'。

 

零晨三点
零晨三点
非常感谢,您解决了我两个问题。
0
零晨三点
零晨三点

我是题主解释一下,这是个一元多项式的相加操作,我先创建了两个一元多项式链表h,H,想创建第三个链表L存放两链表相加的和,但是

返回顶部
顶部