用c语言实现 单链表的应用 1.1 编写函数Init()用来初始化一个空链表; 1.2 编写函数CreatFromTail()用来创建一个链表; 1.3 函数Polyadd()用来实现两个多项式相加算法; 1.4 函数Print()用来输出多项式
时间: 2024-10-07 22:07:51 浏览: 42
C数据结构之单链表详细示例分析
在C语言中,我们可以使用结构体和指针来实现单链表并完成上述功能。以下是相关的函数定义:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int value; // 节点值
struct Node* next; // 指向下一个节点的指针
} Node;
// 初始化一个空链表
void Init(Node** head) {
*head = NULL;
}
// 创建链表从尾部开始,传入一个整数作为第一个元素
Node* CreatFromTail(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->value = value;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
return *head;
}
// 实现两个多项式相加算法
Node* PolyAdd(Node* p1, Node* p2) {
Node* resultHead = NULL; // 结果链表头
Node* currResult = NULL; // 当前结果节点
while (p1 && p2) {
int sum = p1->value + p2->value;
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->value = sum;
newNode->next = NULL;
if (!resultHead) {
resultHead = currResult = newNode;
} else {
currResult->next = newNode;
currResult = newNode;
}
p1 = p1->next;
p2 = p2->next;
}
// 如果有一个链表未遍历完,则将剩余部分追加到结果链表
while (p1) {
int sum = p1->value;
newNode = (Node*)malloc(sizeof(Node));
newNode->value = sum;
newNode->next = NULL;
if (!resultHead) {
resultHead = currResult = newNode;
} else {
currResult->next = newNode;
currResult = newNode;
}
p1 = p1->next;
}
while (p2) {
int sum = p2->value;
newNode = (Node*)malloc(sizeof(Node));
newNode->value = sum;
newNode->next = NULL;
if (!resultHead) {
resultHead = currResult = newNode;
} else {
currResult->next = newNode;
currResult = newNode;
}
p2 = p2->next;
}
return resultHead;
}
// 打印多项式链表
void Print(Node* head) {
Node* temp = head;
while (temp) {
printf("%d ", temp->value);
temp = temp->next;
}
printf("\n");
}
int main() {
Node* list1 = CreatFromTail(1);
list1 = CreatFromTail(2); // 示例:1+2
Node* list2 = CreatFromTail(3);
list2 = CreatFromTail(4); // 示例:3+4
Node* result = Polyadd(list1, list2);
printf("Polynomial addition:\n");
Print(result);
return 0;
}
```
在这个示例中,我们首先初始化了一个空链表,然后通过`CreatFromTail`函数创建了两个多项式链表。`Polyadd`函数实现了相加操作,并返回一个新的链表表示结果。最后,我们使用`Print`函数输出多项式的值。
阅读全文