新手求问 关于链表 编译错误

OnE_cAt_ 2018-06-18 10:46:08
题目是:建立并输出链表内容。链表每个结点包括一个多项式的一项。
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct equ)
struct equ
{
int coe;
int exp;
struct equ*next;
};
struct equ*create(void)
{
int i,n;
scanf("%d",&n);
struct equ *head = NULL;
struct equ *pNew,*pTail;
pTail=pNew=(struct equ*)malloc(LEN);
scanf("%d%d",&pNew->coe,&pNew->exp);
for(i=0;i<n;i++)
{
if(head==NULL) head=pNew;
else pTail->next=pNew;
pTail=pNew;
pNew=(struct equ*)malloc(LEN);
scanf("%d%d",&pNew->coe,&pNew->exp);
}
pNew->next=NULL;
return head;
}
void output(struct equ *head)
{
struct equ*p=head;
while(p!=NULL)
{
if (p->exp!=0)
printf("%dx^%d",p->coe,p->exp);
else printf("%d",p->coe);
p=p->next;
if (p!=NULL) printf("+");
}
}
int mian()
{
int i,j,k;
struct equ *e;
e=create();
scanf("%d",&k);
for(i=0;i<k;i++)
scanf("%d%d",&e->coe,&e->exp);
output(e);
return 0;
}

新手刚学到链表,求问各位大神,为什么上面这段代码一直是编译错误…
...全文
647 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd990620 2018-06-19
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct equ)
struct equ
{
    int coe;
    int exp;
    struct equ*next;
};
(void)
分号前面差着一个equ 改为
include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct equ)
struct equ
{
    int coe;
    int exp;
    struct equ*next;
}equ;
还有就是可能是在定义的时候过于混乱了,回归用的是时候就不太准确,建议可以减少一点定义的用量。
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(muleqt)
typedef struct muleqt
{
    int a,n;
    struct muleqt *next;
}muleqt;
//a1x^n1+a2x^n2...
muleqt *build(int n)
{
    int i;
    muleqt *p1,*p2,*head;
    head=malloc(LEN);
    p1=p2=head;
    for (i=1; i<n; i++)
    {
        scanf("%d %d",&p1->a,&p1->n);
        p2=malloc(LEN);
        p1->next=p2;
        p1=p2;
    }
    if (n!=0) scanf("%d %d",&p1->a,&p1->n);
    p1->next=NULL;
    return head;
}
void print(muleqt *head)
{
    muleqt *p=head;
    for (; p->a==0; p=p->next) ;
    if (p->a!=0 && p->n!=0)
    {
        if(p->a!=1)printf("%dx^%d",p->a,p->n);
        else printf("x^%d",p->n);
    }
    else if (p->n==0) printf("%d",p->a);
    p=p->next;
    while (p!=NULL)
    {
        if (p->a!=0)
        {
            if (p->a<0) printf("%dx",p->a);
            else if (p->a==1)
            {
                if (p->n!=0) printf("+x");
                if (p->n==0) printf("+1");
            }
            else if (p->a>1) printf("+%dx",p->a);   
            if (p->n!=0 && p->n!=1) printf("^%d",p->n);
        }
        p=p->next;
    }
}
int main()
{
    int n;
    muleqt *head;
    scanf("%d",&n);
    head=build(n);
    print(head);
    return 0;
}
OnE_cAt_ 2018-06-19
  • 打赏
  • 举报
回复
引用 6楼自信男孩 的回复:
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>

#define LEN sizeof(struct equ)

struct equ
{
    int coe;
    int exp;
    struct equ*next;
};
struct equ*create(void)
{
    int i,n;
    struct equ *head = NULL;
    struct equ *pNew,*pTail;

    scanf("%d",&n);
    pTail = pNew=(struct equ*)malloc(LEN);
    if (!pTail)
        exit(0);
    scanf("%d%d", &pNew->coe,&pNew->exp);
    for(i=0;i<n;i++)
    {
        if(head==NULL) head=pNew;
        else
            pTail->next = pNew;
        pTail = pNew;
        pNew = (struct equ*)malloc(LEN);
        if (!pNew)
            exit(0);
        scanf("%d%d", &pNew->coe,&pNew->exp);
    }
    //pNew->next=NULL;
    free(pNew);
    pTail->next = NULL;

    return head;
}

void output(struct equ *head)
{
    struct equ*p=head;
    while(p!=NULL)
    {
        if (p->exp!=0)
            printf("%dx^%d",p->coe,p->exp);
        else
            printf("%d",p->coe);
        p = p->next;
        if (p != NULL)
            printf("+");
    }
}

int main()
{
    int i,j,k;
    struct equ *e;
    e=create();
    /*
    scanf("%d",&k);
    for(i=0;i<k;i++)
        scanf("%d%d",&e->coe,&e->exp);
    */
    output(e);
    return 0;
}
参考一下吧 链表最后一个节点处理的不对。最后申请的空间并没有用上,加到链表的最后一个节点的next要指向NULL; main(注意单词拼写)函数内的code有冗余,建议去掉。
谢谢!!
OnE_cAt_ 2018-06-19
  • 打赏
  • 举报
回复
引用 4楼老马何以识途 的回复:
缺少main函數,你寫成mian了
OnE_cAt_ 2018-06-19
  • 打赏
  • 举报
回复
引用 3楼sd990620 的回复:
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct equ)
struct equ
{
    int coe;
    int exp;
    struct equ*next;
};
(void)
分号前面差着一个equ 改为
include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct equ)
struct equ
{
    int coe;
    int exp;
    struct equ*next;
}equ;
还有就是可能是在定义的时候过于混乱了,回归用的是时候就不太准确,建议可以减少一点定义的用量。
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(muleqt)
typedef struct muleqt
{
    int a,n;
    struct muleqt *next;
}muleqt;
//a1x^n1+a2x^n2...
muleqt *build(int n)
{
    int i;
    muleqt *p1,*p2,*head;
    head=malloc(LEN);
    p1=p2=head;
    for (i=1; i<n; i++)
    {
        scanf("%d %d",&p1->a,&p1->n);
        p2=malloc(LEN);
        p1->next=p2;
        p1=p2;
    }
    if (n!=0) scanf("%d %d",&p1->a,&p1->n);
    p1->next=NULL;
    return head;
}
void print(muleqt *head)
{
    muleqt *p=head;
    for (; p->a==0; p=p->next) ;
    if (p->a!=0 && p->n!=0)
    {
        if(p->a!=1)printf("%dx^%d",p->a,p->n);
        else printf("x^%d",p->n);
    }
    else if (p->n==0) printf("%d",p->a);
    p=p->next;
    while (p!=NULL)
    {
        if (p->a!=0)
        {
            if (p->a<0) printf("%dx",p->a);
            else if (p->a==1)
            {
                if (p->n!=0) printf("+x");
                if (p->n==0) printf("+1");
            }
            else if (p->a>1) printf("+%dx",p->a);   
            if (p->n!=0 && p->n!=1) printf("^%d",p->n);
        }
        p=p->next;
    }
}
int main()
{
    int n;
    muleqt *head;
    scanf("%d",&n);
    head=build(n);
    print(head);
    return 0;
}
感谢大神!!
赵4老师 2018-06-19
  • 打赏
  • 举报
回复
关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
自信男孩 2018-06-19
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>

#define LEN sizeof(struct equ)

struct equ
{
    int coe;
    int exp;
    struct equ*next;
};
struct equ*create(void)
{
    int i,n;
    struct equ *head = NULL;
    struct equ *pNew,*pTail;

    scanf("%d",&n);
    pTail = pNew=(struct equ*)malloc(LEN);
    if (!pTail)
        exit(0);
    scanf("%d%d", &pNew->coe,&pNew->exp);
    for(i=0;i<n;i++)
    {
        if(head==NULL) head=pNew;
        else
            pTail->next = pNew;
        pTail = pNew;
        pNew = (struct equ*)malloc(LEN);
        if (!pNew)
            exit(0);
        scanf("%d%d", &pNew->coe,&pNew->exp);
    }
    //pNew->next=NULL;
    free(pNew);
    pTail->next = NULL;

    return head;
}

void output(struct equ *head)
{
    struct equ*p=head;
    while(p!=NULL)
    {
        if (p->exp!=0)
            printf("%dx^%d",p->coe,p->exp);
        else
            printf("%d",p->coe);
        p = p->next;
        if (p != NULL)
            printf("+");
    }
}

int main()
{
    int i,j,k;
    struct equ *e;
    e=create();
    /*
    scanf("%d",&k);
    for(i=0;i<k;i++)
        scanf("%d%d",&e->coe,&e->exp);
    */
    output(e);
    return 0;
}
参考一下吧 链表最后一个节点处理的不对。最后申请的空间并没有用上,加到链表的最后一个节点的next要指向NULL; main(注意单词拼写)函数内的code有冗余,建议去掉。
棉猴 2018-06-19
  • 打赏
  • 举报
回复
1 正如四楼所说,把mian()函数改为main() 2
struct equ*create(void)
{
    int i,n;
        scanf("%d",&n);
   struct equ *head = NULL;
   struct equ *pNew,*pTail;
    pTail=pNew=(struct equ*)malloc(LEN);
    scanf("%d%d",&pNew->coe,&pNew->exp);
    for(i=0;i<n;i++)
    {
         pNew->next=NULL;//添加本行
        if(head==NULL) head=pNew;
        else pTail->next=pNew;
        pTail=pNew;
        pNew=(struct equ*)malloc(LEN);
       scanf("%d%d",&pNew->coe,&pNew->exp);
    }
    //pNew->next=NULL;//注释掉本行,将该行改到for循环中
    return head;
}
老马何以识途 2018-06-19
  • 打赏
  • 举报
回复
缺少main函數,你寫成mian了
OnE_cAt_ 2018-06-18
  • 打赏
  • 举报
回复
引用 1楼老马何以识途 的回复:
編譯錯誤,具體内容是什麽?
显示是这样的,先谢谢大神了!!
老马何以识途 2018-06-18
  • 打赏
  • 举报
回复
編譯錯誤,具體内容是什麽?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧