0 0

C语言链表出错·········求解···比较简单,原谅我是个初学者吧···3

 

各位 大哥 ,小弟最近在做课程设计实验时出了点小问题··一直解决不了··

希望大家帮下忙:

 

 

 

#include<stdio.h>
#include<malloc.h>
#include<conio.h>
typedef struct LNode{
    int coef;/*系数*/
    int expn;/*指数*/
    struct LNode *next;
}LNode,*LinkList;





void Insert_sort_list(LNode *head)
{
    LNode *p, *q, *t, *r;
    p = head->next;
    head->next = NULL;
    while(NULL != p)
    {
       t = head;
       q = t->next; 
       while(NULL != q && q->expn <= p->expn)
       {
          t = q;
          q = q->next;
       }
       r = p ->next;
       t->next = p;
       p->next = q;
       p = r;        
    }
}






void CreateList(LinkList L,int m)/*带头结点*/
{
    LinkList p,q;
    int i=0;
    p=q=L;
    L->next=NULL;
    printf("先输系数后输指数,中间空格\n");
    for(i=0;i<m;i++){
        p=(LNode *)malloc(sizeof(LNode));
        scanf("%d %d",&(p->coef),&(p->expn));
        L->next=p;
        L=p;
    
    }
    L->next=NULL;    
    L=q;
    Insert_sort_list(L);
}/*test success*/


void print(LinkList L)
{
    LinkList p;
    p=L->next;
    printf("\n(下式中X为未知数)\n");
    while(p!=NULL){
        printf("\(%dX\^%d\)",p->coef,p->expn);       
        if(p->next!=NULL)printf("\ \+\ ");
        p=p->next;
    }
    
}
void DeleteNode(LNode *p)
{
    LNode *q;
    q=p->next;
    p->next=q->next;
    free(q);
}/*删除节点*/

int LocateElem(LinkList L,int expn)/*查找是否有与该多项式的系数相同的项*/
{
    LNode *p;
    p=L;
    while(p->expn!=expn&&p->next!=NULL) {  p=p->next; }
    if (p->expn==expn){ return p->coef;} /*若找到则返回系数*/
    else return 0;
   
}

int Length(LinkList L)/*求多项式的项数*/
{
    LNode *p;
    int i=0;
    p=L->next;  
    while(p!=NULL) {
    p=p->next;
    i++;
    }  
    return i;
}
/*
void Delet(LinkList L)
{
    LNode *p,*q;
    p=L->next;
    while(p!=null)
    {
           q=p;
           p=p->next;
           free(q);
    }
}
*/

void Add(LinkList pa,LinkList pb,LinkList pc)/*多项式相加,pc=pa+pa,*/
{
     LNode *p, *q, *r, *t;
     p = pa->next;
     q = pb->next;
     r = pc;
     while(p!=NULL||q!=NULL)
     {
        if(p!=NULL&&q!=NULL)
        {
           if(p->expn<q->expn)
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=p->coef;
              t->expn=p->expn;
              t->next=NULL;
              r->next=t; 
              p=p->next;
           }
        else if(p->expn==q->expn)
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=p->coef+q->coef;
              t->expn=p->expn;
              t->next=NULL;
              r->next=t;
              p=p->next;
              q=q->next;
                   
           }   
        else  
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=q->coef;
              t->expn=q->expn;
              t->next=NULL;
              r->next=t;
              q=q->next; 
           }
           r=r->next;
           
        }
        else if(p!=NULL&&q==NULL)
        {
             r->next=p;
             p=p->next;
             r=r->next;
        }
        else if(p==NULL&&q!=NULL)
        {
             r->next=q;
             q=q->next;
             r=r->next;
        }
     }
} 

void Subtract(LinkList pa,LinkList pb,LinkList pc)/*多项式相减,pc=pa-pa*/
{
     LNode *p, *q, *r, *t;
     p = pa->next;
     q = pb->next;
     r = pc;
     while(p!=NULL||q!=NULL)
     {
        if(p!=NULL&&q!=NULL)
        {
           if(p->expn<q->expn)
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=p->coef;
              t->expn=p->expn;
              t->next=NULL;
              r->next=t; 
              p=p->next;
           }
        else if(p->expn==q->expn)
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=p->coef-q->coef;
              t->expn=p->expn;
              t->next=NULL;
              r->next=t;
              p=p->next;
              q=q->next;
                   
           }   
        else  
           {
              t=(LNode *)malloc(sizeof(LNode));
              t->coef=q->coef*(-1);
              t->expn=q->expn;
              t->next=NULL;
              r->next=t;
              q=q->next; 
           }
           r=r->next;
           
        }
        else if(p!=NULL&&q==NULL)
        {
             r->next=p;
             p=p->next;
             r=r->next;
        }
        else if(p==NULL&&q!=NULL)
        {
             r->next=q;
             q=q->next;
             r=r->next;
        }
     }
}

void Multiply(LinkList pa,LinkList pb,LinkList pc)/*多项式相乘pc=pa*pb*/
{
     LNode *p, *q,  *t, *c, *t1,*t2,*temp1,*temp2;/*temp1放第i个与pb相乘的开成的多项式 */
     t1=(LinkList)malloc(sizeof(LNode));
     pc=(LinkList)malloc(sizeof(LNode));
     t1->next=NULL;
     pc->next=NULL;
     c=pc;
	 t2=pc;
	 temp2=t2;
     temp1=t1;
     if(pa->next==NULL||pb->next==NULL){pc->next==NULL; return;}/* */
     for(p = pa->next;p!=NULL;p=p->next)
     {
          for(q = pb->next;p!=NULL;q=q->next)
          {

              t=(LNode *)malloc(sizeof(LNode));
              t->coef=(int)((p->coef)*(q->coef));
              t->expn=(int)((p->expn)+(q->expn));
              t->next=NULL;
              temp1->next=t; 
              temp1=temp1->next;

                     
          }
          
          pc->next=NULL;
		  c=pc;
          Add(t1,t2,c); 
		  t2=pc;
          t1->next=NULL;
          temp1=t1;        
          
     }     
}
 
int main()
{
    LinkList L,M,N;
    int m,n;
    L=(LinkList)malloc(sizeof(LNode));
    M=(LinkList)malloc(sizeof(LNode));
    N=(LinkList)malloc(sizeof(LNode));
    N->next=NULL;
    printf("请输入您要构造的多项式的项数\n");
    scanf("%d",&m);
    CreateList(L,m);    
    print(L);
    printf("\n长度为:%d",Length(L));
    printf("\n\n输入您要查找该多项式的系数相同的项的指数值:\n");
    scanf("%d",&n);
    if(n=LocateElem(L,n)) printf("存在指数与此相同的项,系数为:%d\n",n);
    else printf("未找到!");
    printf("\n以下构造多一个多项式与原多项式进行运算\n"); 
    printf("\n请输入您要构造的多项式的项数\n");
    scanf("%d",&m);
    CreateList(M,m);    
    printf("\n两个多项式相加的结果:\n");
    Add(L,M,N);
    print(N);
    printf("\n两个多项式相减的结果:\n");
    Subtract(L,M,N);
    print(N);
    printf("\n两个多项式相乘的结果:\n");
    Multiply(L,M,N);  
    print(N);  
    
    getch();
    return 0;

} 
 

下面是图片,每次运行到乘法的时候 都会出现这样的错误 ··是不是内存错误····

 

 

各位兄台高抬躈帮下忙啊············感激不尽············

 

C 
2011年6月16日 20:12

1个答案 按时间排序 按投票排序

0 0

采纳的答案

第243行for(q = pb->next;p!=NULL;q=q->next) 
   改成for(q = pb->next;q!=NULL;q=q->next)再试试

2011年6月16日 22:55

相关推荐

    C语言解决迷宫求解问题.pdf

    在计算机科学领域,迷宫求解问题是一个经典的图论问题,通常通过算法来解决。...对于初学者,这是一个很好的实践项目,可以加深对算法和数据结构的理解。而对于经验丰富的开发者,这类问题提供了优化和性能调优的机会。

    数据结构(C语言本)复习题,适合初学数据结构者使用!

    本复习资料主要针对初学者,旨在帮助他们巩固在数据结构(C语言版)课程中学到的知识。以下是几个关键的数据结构概念和相关知识点: 1. **数组**:这是最基础的数据结构,允许我们存储相同类型的数据元素集合。...

    迷宫求解 C语言版 带注解

    这是一个基于C语言实现的迷宫求解程序,代码包含了人工探索和自动探索两种方式。程序首先定义了迷宫的大小(N),并使用二维数组...对于初学者来说,这是一个很好的学习C语言编程、图形界面设计和算法实现的实践项目。

    C语言经典算法,初学者必看!

    本资料包“C语言经典算法”正为这样的目标提供了宝贵的资源,它包含了100个C语言的经典算法实例,旨在帮助初学者巩固基础,提升编程能力。 1. **基础算法**:这100个算法涵盖了基础的数学运算、逻辑控制、字符串...

    马的遍历 C语言求解

    在IT领域,遍历是一种常见的算法技术,用于访问或处理数据结构(如数组、链表、树或...理解这些问题的解决方案有助于深化对计算机科学基础的理解,特别是对于学习算法和数据结构的初学者来说,这是一个很好的实践案例。

    113道经典C语言题目解答

    根据提供的文件信息,我们可以归纳出以下相关知识点: ### 1. 求两个整数的最大公约数(H.C.F)及最小公倍数(L...这些题目覆盖了 C 语言的基础语法、字符串处理、递归算法、图形打印等多个方面,适合初学者进行练习。

    c语言精彩编程200例

    《C语言精彩编程200例》是一本旨在帮助初学者和有一定基础的开发者深入了解C语言编程技巧的资源集合。这个压缩包包含了丰富的实例代码,旨在通过实践来增强读者的编程能力,尤其对于数据结构的理解和应用有显著的...

    基于c语言实现的支持自己创建迷宫,并求解最短路径

    【基于C语言实现的支持自己创建迷宫,并求解最短路径】是一个有趣且富有挑战性的编程项目,适合初学者和进阶学习者提升技能。这个项目涵盖了基础的C语言编程,数据结构,以及算法设计等多个核心知识点。下面将对这些...

    c语言支持自己创建迷宫,并求解最短路径完整版.zip

    本项目可能采用了二维数组,因为这种方式更符合初学者的习惯。 2. **迷宫生成**:迷宫生成算法有很多种,如深度优先搜索(DFS)、Prim算法等。DFS通常用于生成连通的迷宫,它随机选择一个未访问的相邻单元格并标记...

    c语言操作题答案

    以上总结的知识点涵盖了C语言编程中的多个核心概念和技术,对于初学者理解和掌握C语言编程具有重要意义。通过实践这些题目,可以加深对C语言语法的理解,提高编程技巧,并为更复杂的问题解决打下坚实的基础。同时,...

    16个c语言的课程设计的案例包含讲解打包下载

    "16个C语言的课程设计案例包含讲解打包下载" 提供了一个丰富的资源库,帮助学生和初学者深入理解和运用C语言。 这个资源包可能包含16个不同的项目,每个项目都是一个独立的课程设计案例,涵盖了C语言的各种应用领域...

    c语言基础课程课件.ppt

    "C语言基础课程课件.ppt"是一份专为初学者设计的教育资源,旨在教授C语言的基础知识,特别是关于指针和结构体这两个核心概念。 首先,我们要理解指针是C语言中的一个关键特性。指针可以被看作是内存地址的别名,它...

    C语言难点分析整理!

    ### C语言难点分析整理 #### 变量的作用域和存储类别 在C语言中,变量的作用域决定了在程序...通过对以上知识点的深入理解和实践,可以帮助初学者更好地掌握C语言的核心概念和技术,从而更高效地进行程序设计和开发。

    c语言算法程序集-徐士良

    《C语言算法程序集-徐士良》是一个包含大量C语言编程中经典算法实现的资源集合,对于想要深入理解和掌握计算机科学基础,尤其是算法设计与分析的初学者或专业人士来说,这是一个不可多得的学习材料。C语言作为底层...

    最短路径-C语言实现版本

    在计算机科学中,最短路径问题是一个经典的图论问题,主要目标是找到网络中的两个节点之间最短的路径。这个问题有多种解决方案,其中最著名的包括...对于学习C语言和图论的初学者来说,这是一个很好的实践案例。

    1000个C语言算法程序源码.rar

    本资源"1000个C语言算法程序源码"为初学者提供了丰富的实践材料,旨在帮助读者深入理解和掌握C语言算法的运用。 这些源码涵盖了基础算法到高级算法,包括排序、搜索、图论、动态规划、字符串处理、数据结构等各个...

    C语言算法教程(txt文档)

    这个"C语言算法教程(txt文档)"是为初学者和有经验的开发者提供的一份详细指南,旨在帮助他们理解和掌握如何在C语言中实现算法。通过阅读这份txt文档,你可以深入学习到C语言中的数据结构和算法设计。 1. **基础...

    纯c语言迷宫源码.rar

    标题中的“纯C语言迷宫源码.rar”指的是一个使用C语言编写的迷宫生成...通过研究这个C语言迷宫源码,不仅可以提升C语言编程技能,还能加深对算法和软件开发流程的理解,对于初学者和有经验的开发者都有很大的学习价值。

    C语言学习大纲__郝斌(讲解)

    "C语言学习大纲__郝斌(讲解)"是为初学者提供的一门入门课程,旨在帮助学习者系统地理解和掌握C语言的基础知识。 1. **C语言的起源与发展**: C语言起源于1970年代,由丹尼斯·里奇和肯·汤普逊在贝尔实验室开发,...

Global site tag (gtag.js) - Google Analytics