youngk1997 发表于 2018-4-30 13:42:11

是哪里溢出了

本帖最后由 youngk1997 于 2018-5-1 15:07 编辑

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


typedef struct pnode
{
int m,n;
struct pnode *next;
}pnode;

void creatpolyn(pnode *s,int b)
{
pnode *p,*q,*pre;
int i=1;
p=(pnode*)malloc(sizeof(pnode));
p->next=NULL;
for(i=1;i<=b;i++)
   {
   s=(pnode*)malloc(sizeof(pnode));
   printf("请输入第%d项的系数:",i);
   scanf("%d",&(s->m));
   printf("请输入第%d项的指数:",i);
   scanf("%d",&(s->n));
   pre=p;
   q=p->next;
   while(q&&(q->n)<(s->n))
      {
      pre=q;
      q=q->next;
      }
   s->next=q;
   pre->next=s;
   }
printf("输入完成!\n");
}
void sumpolyn(pnode *x1,pnode *x2)
{
    pnode *p1,*p2,*p3,*r;
    int sum=0;
    p1=(pnode*)malloc(sizeof(pnode));
    p2=(pnode*)malloc(sizeof(pnode));
    p3=(pnode*)malloc(sizeof(pnode));

    p1=x1->next;
    p2=x2->next;
    p3=x1;
    while(p1&&p2)
      {
   if((p1->n)==(p2->n))
            {
          sum=(p1->m)+(p2->m);
          if(sum!=0)
      {
          p1->m=sum;
          p3->next=p1;
          p3=p1;
          p1=p1->next;
                  r=p2;p2=p2->next;free(r);
                }
          else
      {
                  r=p1;p1=p1->next;free(r);
                  r=p2;p2=p2->next;free(r);
      }

      }
         else if((p1->n)<(p2->n))
            {
          p3->next=p1;
          p3=p1;
          p1=p1->next;
      }
         else
            {
          p3->next=p2;
          p3=p2;
          p2=p2->next;
      }
       }
    p3->next=p1? p1:p2;
    free(x2);
}
int main()
{
    pnode *p1=NULL;
    pnode *p2=NULL;
    int m,n;
    printf("请输入几项数据:");
    scanf("%d",&m);
    creatpolyn(p1,m);
    printf("请输入几项数据:");
    scanf("%d",&n);
    creatpolyn(p2,n);
    sumpolyn(p1,p2);
    return 0;
}

人造人 发表于 2018-4-30 13:55:00

ba21 发表于 2018-4-30 16:02:17

问题多了去了。我给你上个参考代码,自己好好对对。

youngk1997 发表于 2018-5-1 15:01:53

ba21 发表于 2018-4-30 16:02
问题多了去了。我给你上个参考代码,自己好好对对。

代码在哪里?{:5_92:}

ba21 发表于 2018-5-1 19:34:02

youngk1997 发表于 2018-5-1 15:01
代码在哪里?

#include<stdio.h>
#include<stdlib.h>
typedef struct pnode
{
int m,n;
struct pnode *next;
}pnode,*polyn;

void creatpolyn(polyn *x,int n)
{
pnode *p,*s,*q,*pre;
int i=1;

p=(polyn)malloc(sizeof(pnode));
p->next=NULL;
for(i=0;i<n;i++)
   {

   s=(polyn)malloc(sizeof(pnode));
   printf("请输入第%d项的系数:",i+1);
   scanf("%d",&s->m);
   printf("请输入第%d项的指数:",i+1);
   scanf("%d",&s->n);
   
       if(p->next==NULL)// 判断是不是头节点
       {
               p->next = s;
               s->next = NULL;
       }
       else
       {       
                pre=p;

                q=p->next;
                while( q && (q->n)<(s->n) ) // 开始迭代
                {
                        pre=q;
                        q=q->next;
                }

                if(q) // 判断是不是在链表的中间位置。
                {
                       pre->next = s;
                       s->next=q;
                }
                else// 说明在链表尾
                {
                        pre->next = s;
                        s->next = NULL;
                }


       }

   }
}
int main()
{
    polyn p1;
    int m;
    printf("请输入几项数据:");   
    scanf("%d",&m);
    creatpolyn(&p1,m);
    /*sumpolyn(p1,p2);*/
}
页: [1]
查看完整版本: 是哪里溢出了