鱼C论坛

 找回密码
 立即注册
查看: 914|回复: 3

求助!单链表实现多项式相加

[复制链接]
发表于 2021-9-30 14:14:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
test文件
#include"E:\Study Source\Ccode\DataStructure_Ex2\second\SecondLinkList.h"
int main() {
        linklist p;
    initLink(p);
    addNode(p,3);
    display(p);
    printf("%d\n",p->coe);
    
    linklist q;
    initLink(q);
    addNode(q,4);
        display(q);
        printf("%d\n",q->coe);
        
        
        linklist L=addEveryOne(p,q);
        display(L);
    return 0;
} 
linklist头文件
#include <stdio.h>
#include <stdlib.h>
#include <E:\Study Source\Ccode\DataStructure_Ex1\third\c1.h>
typedef struct Link{
        int coe;
    int elem;
    struct Link *next;
}link,*linklist;
Status initLink(linklist &L){
        L=(linklist)malloc(sizeof(link));
        L->next=NULL;
        L->coe=0;
        return OK;
}
Status GetElem(linklist &L,int i,int &coe,int &elem){
        int j=1;
        linklist p=L->next;
        while(p&&(j<i)){
                p=p->next;
                ++j;
        }
        if(!p||(j>i))return ERROR;
        coe=p->coe;
        elem=p->elem;
        return OK;
}
link *LocateElem(linklist &L,int coe,int elem){
        linklist p=(linklist)malloc(sizeof(link));
        p=L->next;
        while(p&&(p->coe!=coe)&&p->elem!=elem){
                p=p->next;
        }
        return p;
}
Status LinkInsert(linklist &L,int i,int coe, int elem){
        linklist p=L;
        int j=0;
        while(p&&(j<i-1)){
                p=p->next;
                ++j;
        }
        if(!p||(j>i-1))
        return ERROR;
        linklist s=(linklist)malloc(sizeof(link));
        s->coe=coe;
        s->elem=elem;
        s->next=p->next;
        p->next=s;
        L->coe++;
        return OK;
}
Status ListDel(linklist &L,int i){
        linklist p=L;
        int j=0;
        while((p->next)&&(j<i-1)){
                p=p->next;
                ++j;
        }
        if(!(p->next)||(j>i-1))return ERROR;
        linklist q=p->next;
        p->next=q->next;
        free(q);
        L->coe--;
        return OK;
}
void addNode(linklist &L,int n){
        linklist p,tail;
        tail=L;
        for(int i=0;i<n;i++){
                p=(linklist)malloc(sizeof(link));
                scanf("%d %d",&p->coe,&p->elem);
                tail->next=p;
                tail=p;
        }
        L->coe+=n;
        tail->next=NULL;
}
void addNode(linklist &L,int coe,int elem){
        linklist p,tail;
        tail=L;
        while(tail->next){
        tail=tail->next;
    }
                p=(linklist)malloc(sizeof(link));
                p->coe=coe;p->elem=elem;
                tail->next=p;
                tail=p;
        L->coe++;
        tail->next=NULL;
}
void display(linklist &L){
    linklist temp=L;
    while (temp->next) {
        temp=temp->next;
        printf("%d的%d次方 ",temp->coe,temp->elem);
    }
    printf("\n");
}
linklist addEveryOne(linklist &a,linklist &b){
    linklist p,q,r,temp;
    p=a->next;
    q=b->next;
    r=(linklist)malloc(sizeof(link));
    temp=r;
    while(p&&q){
        if(p->elem>q->elem){
                addNode(r,q->coe,q->elem);
                temp=temp->next;
            q=q->next;
        }
        else if(p->elem<q->elem){
            addNode(r,p->coe,p->elem);
            temp=temp->next;
            p=p->next;
        }
        else if(p->elem==q->elem){
            int sum = p->coe+q->coe;
            if(sum == 0){
                p = p->next;
                q = q->next;
            }
            else{
                    addNode(r,sum,p->elem);
                    temp=temp->next;
                    p = p->next;
                q = q->next;
                }
            }
        }
        if(p!=NULL)
            temp->next = p;
        if(q!=NULL)
            temp->next = q;
        if(p==NULL&&q==NULL)
            temp->next=NULL;
    return r;
}
运行addEveryOne函数的时候似乎就一直不动无法退出循环了XD,求助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-30 20:00:11 | 显示全部楼层
本帖最后由 jhq999 于 2021-10-1 07:01 编辑
#include <stdio.h>
#include <stdlib.h>
//#include <E:\Study Source\Ccode\DataStructure_Ex1\third\c1.h>
enum Status{ERROR,OK};
typedef struct Link{
        int coe;
    int elem;
    struct Link *next;
}link,*linklist;
Status initLink(linklist &L){
        L=(linklist)malloc(sizeof(link));
        L->next=NULL;
        L->coe=0;
        return OK;
}
Status GetElem(linklist &L,int i,int &coe,int &elem){
        int j=1;
        linklist p=L->next;
        while(p&&(j<i)){
                p=p->next;
                ++j;
        }
        if(!p||(j>i))return ERROR;
        coe=p->coe;
        elem=p->elem;
        return OK;
}
link *LocateElem(linklist &L,int coe,int elem){
        linklist p=(linklist)malloc(sizeof(link));
        p=L->next;
        while(p&&(p->coe!=coe)&&p->elem!=elem){
                p=p->next;
        }
        return p;
}
Status LinkInsert(linklist &L,int i,int coe, int elem){
        linklist p=L;
        int j=0;
        while(p&&(j<i-1)){
                p=p->next;
                ++j;
        }
        if(!p||(j>i-1))
        return ERROR;
        linklist s=(linklist)malloc(sizeof(link));
        s->coe=coe;
        s->elem=elem;
        s->next=p->next;
        p->next=s;
        L->coe++;
        return OK;
}
Status ListDel(linklist &L,int i){
        linklist p=L;
        int j=0;
        while((p->next)&&(j<i-1)){
                p=p->next;
                ++j;
        }
        if(!(p->next)||(j>i-1))return ERROR;
        linklist q=p->next;
        p->next=q->next;
        free(q);
        L->coe--;
        return OK;
}
void addNode(linklist &L,int n){
        linklist p,tail;
        tail=L;
        for(int i=0;i<n;i++){
                p=(linklist)malloc(sizeof(link));
                scanf("%d %d",&p->coe,&p->elem);
                tail->next=p;
                tail=p;
        }
        L->coe+=n;
        tail->next=NULL;
}
void addNode(linklist &L,int coe,int elem){
        linklist p,tail;
        tail=L;
        while(tail->next){
        tail=tail->next;
    }
                p=(linklist)malloc(sizeof(link));
                p->coe=coe;p->elem=elem;
                tail->next=p;
                tail=p;
        L->coe++;
        tail->next=NULL;
}
void display(linklist &L){
    linklist temp=L;
    while (temp->next) {
        temp=temp->next;
        printf("%d的%d次方 ",temp->coe,temp->elem);
    }
    printf("\n");
}
linklist addEveryOne(linklist &a,linklist &b){
    linklist p,q,r,temp;
    p=a->next;
    q=b->next;
    r=(linklist)malloc(sizeof(link));
    r->coe=r->elem=0;r->next=NULL;///////////////////////////////////////初始化为0,主要是r->next=NULL,要不天知道这个指针指向哪里?
    temp=r;
    while(p&&q){
        if(p->elem>q->elem){
                addNode(r,q->coe,q->elem);
                temp=temp->next;
            q=q->next;
        }
        else if(p->elem<q->elem){
            addNode(r,p->coe,p->elem);
            temp=temp->next;
            p=p->next;
        }
        else if(p->elem==q->elem){
            int sum = p->coe+q->coe;
            if(sum == 0){
                p = p->next;
                q = q->next;
            }
            else{
                    addNode(r,sum,p->elem);
                    temp=temp->next;
                    p = p->next;
                q = q->next;
                }
            }
        }
        if(p!=NULL)
            temp->next = p;
        if(q!=NULL)
            temp->next = q;
        if(p==NULL&&q==NULL)
            temp->next=NULL;
    return r;
}
//#include"E:\Study Source\Ccode\DataStructure_Ex2\second\SecondLinkList.h"
int main() {
        linklist p;
    initLink(p);
    addNode(p,3);
    display(p);
    printf("%d\n",p->coe);
    
    linklist q;
    initLink(q);
    addNode(q,4);
        display(q);
        printf("%d\n",q->coe);
        
        
        linklist L=addEveryOne(p,q);
        display(L);
    return 0;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-1 07:04:25 | 显示全部楼层
反正我是不管声明都初始化,宁可开始费功夫也比出BUG强
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-1 18:20:02 | 显示全部楼层
代码级别高啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 11:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表