1、单链表的应用1.1 编写函数Init()用来初始化一个空链表;1.2 编写函数CreatFromTail()用来创建一个链表;1.3 函数Polyadd()用来实现两个多项式相加算法;1.4 函数Print()用来输出多项式测试 C语言
时间: 2024-09-25 07:03:49 浏览: 34
两个有序链表的合并解决方法
在C语言中,单链表是一种基础数据结构,可以用于多种应用,包括但不限于:
1. 初始化空链表 (Init()):
```c
typedef struct Node {
int coef; // 系数
int exp; // 指数
struct Node* next;
} PolynomialNode;
void Init(PolynomialNode** head) {
*head = NULL; // 将头节点设置为NULL表示链表为空
}
```
1. 创建链表从尾部 (CreatFromTail()):
这个操作通常用来插入元素到链表末尾,但如果链表为空,则需要特殊处理:
```c
void CreatFromTail(PolynomialNode** head, int coef, int exp) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coef = coef;
newNode->exp = exp;
newNode->next = NULL; // 新增项作为尾部
if (*head == NULL) { // 如果链表为空
*head = newNode;
} else {
PolynomialNode* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
```
2. 多项式相加 (Polyadd()):
通过遍历并合并对应系数和指数的节点来实现:
```c
void Polyadd(PolynomialNode** head1, PolynomialNode** head2, PolynomialNode** result) {
PolynomialNode* p1 = *head1, *p2 = *head2, *res = NULL;
PolynomialNode* temp;
while (p1 && p2) {
int sumCoef = p1->coef + p2->coef;
temp = (sumCoef > 0 || (sumCoef == 0 && p1->exp < p2->exp)) ? createNode(sumCoef, max(p1->exp, p2->exp)) : NULL;
if (temp) {
if (!res) {
res = temp;
} else {
temp->next = res;
}
}
p1 = p1->next;
p2 = p2->next;
}
// 添加剩余的部分,如果有的话
while (p1) {
temp = createNode(p1->coef, p1->exp);
if (res) {
temp->next = res;
}
p1 = p1->next;
res = temp;
}
// 同样处理p2部分
while (p2) {
temp = createNode(p2->coef, p2->exp);
if (res) {
temp->next = res;
}
p2 = p2->next;
res = temp;
}
*result = res;
}
// 假设createNode()是一个辅助函数,用于创建新节点
```
3. 输出多项式 (Print()):
遍历链表并打印系数和指数:
```c
void Print(PolynomialNode* head) {
PolynomialNode* curr = head;
while (curr) {
printf("(%d*x^%d) ", curr->coef, curr->exp);
curr = curr->next;
}
printf("\n");
}
```
阅读全文