利用链表结构,malloc函数和 free函数实现将终端输入的一系列字符串用链表的形式保存下来。然后再将这些数据组装起来,回显到输出终端。
时间: 2024-12-22 18:23:55 浏览: 43
链表是一种线性的数据结构,每个节点包含数据和指向下一个节点的指针。我们可以利用链表来动态地存储一系列字符串。首先,我们需要以下几个步骤:
1. **定义链表节点**:
创建一个链表节点结构体,包括一个字符串变量、一个空字符作为结束符以及一个指向下一个节点的指针。
```c
typedef struct ListNode {
char* str;
char terminator; // 结束符,如'\0'
struct ListNode* next;
} ListNode;
```
2. **动态分配内存**:
使用`malloc`函数为每个新加入的字符串分配内存,并在字符串末尾添加终止符。
```c
ListNode* createNode(char* input) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (!newNode) {
perror("Memory allocation failed");
return NULL;
}
newNode->str = strdup(input);
if (!newNode->str) {
free(newNode);
perror("String duplication failed");
return NULL;
}
newNode->terminator = '\0';
newNode->next = NULL;
return newNode;
}
```
3. **读取输入并添加到链表**:
遍历用户输入,对每个输入调用`createNode`函数生成新的节点,并将其连接到链表的末尾。
4. **链表拼接和显示**:
当所有字符串都被处理后,可以遍历链表,逐个打印节点中的内容,直到遇到终止符为止。这可以使用递归或循环完成。
```c
void printList(ListNode* head) {
if (head == NULL) return;
printf("%s", head->str);
printList(head->next); // 递归或循环遍历
}
// 使用示例
int main() {
ListNode* listHead = NULL;
char input[100];
while (fgets(input, sizeof(input), stdin)) {
// 去掉行尾换行符
input[strcspn(input, "\n")] = '\0';
ListNode* newNode = createNode(input);
if (listHead == NULL) {
listHead = newNode;
} else {
newNode->next = listHead;
listHead = newNode;
}
}
printList(listHead);
return 0;
}
```
阅读全文
相关推荐


















