C语言链表实现:创建、插入、删除、多项式相加及求和
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语言链表的基本框架,包含了链表的基本操作以及应用案例。你可以根据自己的需求修改和扩展这段代码,实现更复杂的功能。
原文地址: https://www.cveoy.top/t/topic/I8J 著作权归作者所有。请勿转载和采集!