(线性表)设键盘输入n个英语单词,输入格式为n, w1, w2, …,wn,其中n表示随后输入英语单词个数,试编一程序,建立一个单向链表,实现:如果单词重复出现,则只在链表上保留一个。 使用C语言数组的方法来写出此题的完整代码
时间: 2024-03-11 09:43:38 浏览: 116
以下是使用C语言数组实现该题的完整代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100 // 单词最大长度
#define MAX_WORDS 100 // 最大单词个数
struct Node {
char word[MAX_LENGTH]; // 单词
struct Node *next; // 指向下一个节点的指针
};
int main() {
struct Node *head = NULL;
struct Node *tail = NULL;
char words[MAX_WORDS][MAX_LENGTH]; // 保存输入的单词
int n; // 单词个数
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", words[i]);
// 判断单词是否已经在链表中出现过
int flag = 0;
struct Node *p = head;
while (p != NULL) {
if (strcmp(p->word, words[i]) == 0) {
flag = 1;
break;
}
p = p->next;
}
// 如果单词没有出现过,则将其加入链表
if (!flag) {
struct Node *node = (struct Node *) malloc(sizeof(struct Node));
strcpy(node->word, words[i]);
node->next = NULL;
if (head == NULL) {
head = node;
} else {
tail->next = node;
}
tail = node;
}
}
// 输出链表中的所有单词
struct Node *p = head;
while (p != NULL) {
printf("%s ", p->word);
p = p->next;
}
return 0;
}
```
该程序通过一个二维字符数组 `words` 保存输入的单词,通过链表去重并输出不重复的单词。程序的核心思路是,对于每一个输入的单词,遍历链表判断是否已经出现过,如果没有出现过,则将其加入链表。最后,遍历链表输出所有不重复的单词。
阅读全文