如何用C语言设计一个算法来判断两个链式字符串S1和S2是否相等?如果相等,返回1;否则,返回0。
时间: 2024-11-25 11:19:53 浏览: 20
在C语言中,我们可以使用递归的方式来设计一个算法来判断两个链式字符串S1和S2是否相等。这里的关键在于比较当前节点的字符是否相同,并检查它们是否有剩余的节点需要继续比较。
下面是一个简单的递归函数`isEqual`的实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
char data;
struct Node* next;
} Node;
int isEqual(Node* s1, Node* s2) {
// 如果都为空,说明字符串结束,相等
if (s1 == NULL && s2 == NULL)
return 1;
// 如果其中一个为空,另一个非空,则不相等
if (s1 == NULL || s2 == NULL)
return 0;
// 如果当前字符不相等,直接返回0
if (s1->data != s2->data)
return 0;
// 递归地比较下一个节点
return isEqual(s1->next, s2->next);
}
int main() {
// 创建链表示例
Node *s1 = malloc(sizeof(Node));
Node *s2 = malloc(sizeof(Node));
// ... (填充链表元素)
int result = isEqual(s1, s2);
printf("%d\n", result); // 输出0或1
free(s1);
free(s2);
return 0;
}
```
这个函数首先检查两个链表头指针是否同时为NULL,如果是则表示两串都已遍历完,相等。然后逐个比较每个节点的字符,直到找到不匹配或者任一链表结束。
阅读全文