C语言链表实现:创建、插入、删除、多项式相加及求和

这篇文章展示了如何使用C语言实现链表,并进行一些基本操作,包括创建链表、插入节点、删除节点以及使用链表实现两个一元多项式的相加,最后演示如何计算结果链表的节点数据之和。

代码实现c#include <stdio.h>#include <stdlib.h>

typedef int ElemType;

// 定义链表节点结构体typedef struct LNode { ElemType data; struct LNode *next;} LNode, *LinkList;

// 初始化链表void initlial(LinkList &L) { L = (LinkList)malloc(sizeof(LNode)); L->next = NULL;}

// 创建链表void CreateList(LinkList &L, int n) { LinkList p = L, s; ElemType x; for (int i = 1; i <= n; i++) { s = (LinkList)malloc(sizeof(LNode)); scanf('%d', &x); s->data = x; s->next = NULL; p->next = s; p = p->next; }}

// 输出链表元素void OutList(LinkList L) { LinkList p = L->next; while (p) { printf('%d ', p->data); p = p->next; } printf(' ');}

// 计算链表元素的和void addList(LinkList L, ElemType &sum) { LinkList p = L->next; sum = 0; while (p) { sum += p->data; p = p->next; }}

// 在指定位置插入节点void InsertList(LinkList &L, int i, ElemType e) { LinkList p = L, s; int j = 0; while (j < i - 1 && p) { p = p->next; j++; } if (!p || j > i - 1) { printf('插入位置无效 '); return; } s = (LinkList)malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next = s;}

// 删除指定位置的节点void DeleList(LinkList &L, int i, ElemType &e) { LinkList p = L, q; int j = 0; while (j < i - 1 && p->next) { p = p->next; j++; } if (!p->next || j > i - 1) { printf('删除位置无效 '); return; } q = p->next; e = q->data; p->next = q->next; free(q);}

// 两个多项式相加void AddPolyn(LinkList &LA, LinkList LB) { LinkList pa = LA->next, pb = LB->next, pc = LA; ElemType ha, hb, hc;

while (pa && pb) {        ha = pa->data;        hb = pb->data;

    if (ha < hb) {            hc = ha;            pa = pa->next;        } else if (ha > hb) {            hc = hb;            pb = pb->next;        } else {            hc = ha + hb;            pa = pa->next;            pb = pb->next;        }

    if (hc != 0) {            LinkList q = (LinkList)malloc(sizeof(LNode));            q->data = hc;            q->next = pc->next;            pc->next = q;            pc = q;        }    }

if (pa) {        pc->next = pa;    }    if (pb) {        pc->next = pb;    }

}

int main() { LinkList L; initlial(L); printf('智能科学与技术2203班 卢星兆 221301308 ') ; int n; printf('请输入链表的长度:'); scanf('%d', &n); CreateList(L, n);

printf('链表元素列表为:');    OutList(L);

int i, e;    printf('请输入要删除的第 i 个节点的位置:');    scanf('%d', &i);    DeleList(L, i, e);    printf('删除的节点的值为:%d

', e); printf('删除后的链表元素列表为:'); OutList(L);

LinkList L1, L2;    initlial(L1);    initlial(L2);

printf('请输入多项式L1的项数:');    scanf('%d', &n);    printf('请输入多项式L1的%d个项:

', n); CreateList(L1, n);

printf('请输入多项式L2的项数:');    scanf('%d', &n);    printf('请输入多项式L2的%d个项:

', n); CreateList(L2, n);

printf('多项式L1的链表元素列表为:');    OutList(L1);    printf('多项式L2的链表元素列表为:');    OutList(L2);

AddPolyn(L1, L2);    printf('两个一元多项式相加后的链表元素列表为:');    OutList(L1);        // 计算L1中所有节点数据的和    ElemType sum;    addList(L1, sum);    printf('L1中的数字求和为:%d

', sum); return 0;}

代码说明

  • 代码中定义了 LNode 结构体来表示链表节点,包含数据域 data 和指针域 next。- initlial 函数用于初始化一个空链表。- CreateList 函数用于创建一个包含 n 个节点的链表,节点的值从键盘输入。- OutList 函数用于输出链表中所有节点的值。- addList 函数用于计算链表中所有节点数据的和。- InsertList 函数用于在指定位置 i 插入一个值为 e 的节点。- DeleList 函数用于删除指定位置 i 的节点,并将被删除节点的值存储在 e 中。- AddPolyn 函数用于实现两个一元多项式的相加,并将结果存储在第一个链表中。- main 函数中演示了如何使用上述函数创建链表、删除节点、插入节点、进行多项式相加以及计算结果链表节点数据的和。

总结

这份代码提供了一个关于C语言链表的基本框架,包含了链表的基本操作以及应用案例。你可以根据自己的需求修改和扩展这段代码,实现更复杂的功能。

C语言链表实现:创建、插入、删除、多项式相加及求和

原文地址: https://www.cveoy.top/t/topic/I8J 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录