(二)单向链表C语言实现和多项式相加

1.单向链表代码

注意创建的中间节点pNew必须要每次循环创建一遍,因为那是一个指针,只创建一遍而重复赋值的话,会导致链表里面的节点也会改变

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define true 1
#define false 0

typedef int status;
typedef int ElemType;
typedef struct Node{
    ElemType elem;
    struct Node *next;
}Node,*pNode;

//基本操作
//创建一个长度为n的链表
pNode CreateList(int n){
    ElemType elem;
    pNode pHead,pTail;
    pHead = (pNode)malloc(sizeof(Node));
    pTail = pHead;
    pTail->next=NULL;
    for (int i=0; i<n; ++i) {
        pNode pNew = (pNode)malloc(sizeof(Node));
        scanf("%d", &elem);
        pNew->elem=elem;
        pNew->next=NULL;
        pTail->next=pNew;
        pTail=pNew;
    }
    return pHead;
}
//在第n个位置之后加入elem节点
ElemType InsertNode(pNode p,ElemType elem,int n){
    pNode temp = p->next;
    pNode pNew = (pNode)malloc(sizeof(Node));
    pNew->elem=elem;
    //第一个位置,头插
    if (n==0) {
        pNew->next=temp;
        p->next=pNew;
        return elem;
    }
    //把temp指向要插入的位置
    for(int i=1;i<=n-1;i++){
        temp=temp->next;
        //如果在插入位置在最后,不存在节点,尾插
        if(temp->next==NULL){
            pNew->next=NULL;
            temp->next=pNew;
            return elem;
        }
    }
    //在某节点位置插入
    pNew->next=temp->next;
    temp->next=pNew;
    return elem;
}
//删除元素值为elem的节点
ElemType DeleteNode(pNode p,ElemType elem){
    pNode temp=p->next;
    pNode pNew;
    if (temp->elem==elem) {
        p->next=temp->next;
        free(temp);
        return elem;
    }
    while (temp!=NULL) {
        if(temp->next->elem==elem){
            pNew = temp->next;
            temp->next=pNew->next;
            free(pNew);
            return elem;
        }
        temp=temp->next;
    }
    printf("删除失败\n");
    return false;
}
//遍历
void TraverseList(pNode p){
    pNode temp = p->next;
    while (temp!=NULL) {
        printf("%d ",temp->elem);
        temp=temp->next;
    }
    printf("\n");
}


int main(){
    pNode pHead=CreateList(3);
    TraverseList(pHead);
    InsertNode(pHead, 10, 0);
    TraverseList(pHead);
    InsertNode(pHead, 1000, 4);
    TraverseList(pHead);
    InsertNode(pHead, 10000, 6);
    TraverseList(pHead);
    DeleteNode(pHead, 10000);
    TraverseList(pHead);
}

2.实例:

image.png

3.应用:多项式相加

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

typedef struct Node{
    //系数
    int coef;
    //指数
    int index;
    struct Node *next;
}Node,*pNode;

pNode CreateList(int len){
    pNode head,tail,new;
    head = (pNode)malloc(sizeof(Node));
    tail=head;
    tail->next=NULL;
    int coef,index;
    for (int i =0; i<len; i++) {
        new = (pNode)malloc(sizeof(Node));
        printf("input coef:");
        scanf("%d",&coef);
        printf("input index:");
        scanf("%d",&index);
        new->coef=coef;new->index=index;
        new->next=NULL;
        tail->next=new;
        tail=new;
    }
    return head;
}

pNode MergeList(pNode L1,pNode L2){
    pNode head,tail,new;
    pNode temp1,temp2;
    head=(pNode)malloc(sizeof(Node));
    head->next=NULL;
    tail=head;
    temp1=L1->next;
    temp2=L2->next;
    while (temp1!=NULL && temp2!=NULL) {
        new=(pNode)malloc(sizeof(Node));
        if(temp1->index== temp2->index){
            new->index=temp1->index;
            new->coef=temp1->coef+temp2->coef;
            temp1=temp1->next;
            temp2=temp2->next;
            new->next=NULL;
            tail->next=new;
            tail=new;
            continue;
        }
        if(temp1->index>temp2->index){
            new->index=temp1->index;
            new->coef=temp1->coef;
            temp1=temp1->next;
        }else{
            new->index=temp2->index;
            new->coef=temp2->coef;
            temp2=temp2->next;
        }
        new->next=NULL;
        tail->next=new;
        tail=new;
    }
    while (temp1!=NULL) {
        new=(pNode)malloc(sizeof(Node));
        new->index=temp1->index;
        new->coef=temp1->coef;
        new->next=NULL;
        tail->next=new;
        tail=new;
        temp1=temp1->next;
    }
    while (temp2!=NULL) {
        new=(pNode)malloc(sizeof(Node));
        new->index=temp1->index;
        new->coef=temp1->coef;
        new->next=NULL;
        tail->next=new;
        tail=new;
        temp2=temp2->next;
    }
    return head;
}

void TraverseList(pNode L){
    pNode p=L->next;
    while(p!=NULL){
        printf("%d--%d  ",p->coef,p->index);
        p=p->next;
    }
    printf("\n");
}

int main(){
    int len1,len2;
    pNode L1,L2,L3;
    
    printf("input L1 len:");
    scanf("%d",&len1);
    L1=CreateList(len1);
    
    printf("input L2 len:");
    scanf("%d",&len2);
    L2=CreateList(len2);
    
    TraverseList(L1);
    TraverseList(L2);
    L3=MergeList(L1, L2);
    TraverseList(L3);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,617评论 18 399
  • 作为一个资深的新手程序员😂,链表这些既基础又深奥的东西是日常工作中并不常见,但是却非常重要,所以就总结一下链表的简...
    Clark_new阅读 4,249评论 4 12
  • 转载请注明出处:http://www.jianshu.com/p/c65d9d753c31 在上一篇博客《数据结构...
    Alent阅读 3,502评论 4 74
  • 链表问题是面试过程中经常被问到的一部分,很考查编程功底。最近刷了 LeetCode 上链表部分的面试题,我总结了一...
    JohnnyShieh阅读 4,956评论 0 9
  • 本文内容:1、 什么是链表?2、 链表共分几类?3、 链表的 C 实现! 总表:《数据结构?》 工程代码 Gith...
    半纸渊阅读 39,948评论 0 54