C/C++:编写程序建立一个单向链表。链表结点中的数据为从键盘输入的一个字符串,但要求将该串字符按由小到大的顺序组织在链表中。
时间: 2024-03-04 19:48:56 浏览: 48
c语言实现链表的基本操作,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
以下是使用C语言编写的单向链表代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义节点结构体
struct Node {
char data[100];
struct Node* next;
};
// 创建新节点
struct Node* createNode(char* str) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
strcpy(newNode->data, str);
newNode->next = NULL;
return newNode;
}
// 插入新节点
void insertNode(struct Node** head, char* str) {
struct Node* newNode = createNode(str);
struct Node* curr = *head;
struct Node* prev = NULL;
while (curr != NULL && strcmp(curr->data, str) < 0) {
prev = curr;
curr = curr->next;
}
if (prev == NULL) {
newNode->next = *head;
*head = newNode;
}
else {
prev->next = newNode;
newNode->next = curr;
}
}
// 遍历链表并输出节点的数据
void displayList(struct Node* head) {
struct Node* curr = head;
while (curr != NULL) {
printf("%s ", curr->data);
curr = curr->next;
}
}
int main() {
struct Node* head = NULL;
char str[100];
while (fgets(str, 100, stdin)) {
if (strcmp(str, "exit\n") == 0) {
break;
}
// 去除末尾的换行符
str[strlen(str) - 1] = '\0';
insertNode(&head, str);
}
displayList(head);
return 0;
}
```
与C++代码类似,首先定义了一个`Node`结构体,包含`data`和`next`两个成员变量。`createNode`函数用于创建一个结点,其中`data`为输入的字符串,`next`为`NULL`。`insertNode`函数用于将新结点插入到链表中,按照从小到大的顺序。首先创建一个新结点,然后遍历链表,找到新结点应该插入的位置。如果链表为空或新结点应该插入到链表头部,则将新结点插入到链表头部;否则,将新结点插入到链表中间。`displayList`函数用于遍历链表,输出所有结点的`data`。
在`main`函数中,首先定义了一个空链表`head`,然后使用`fgets`函数从标准输入中读取字符串,并将其插入到链表中。当输入`exit`时,退出循环。最后调用`displayList`函数遍历链表,并输出所有结点的`data`。
阅读全文