可是我链表中的数据储存的是字符串而不是字符,请再次用c语言修改并且展示修改后的代码
时间: 2024-10-10 07:05:58 浏览: 39
当然,针对存储字符串的情况,你需要调整一些地方。这里是对原代码中涉及字符串的部分进行修改:
1. 数据结构 `LNode` 中的 `data` 类型从 `Status` 改为 `char*`,用于存储字符串。
2. 创建链表、输入字符串时,使用字符串形式的 `scanf` 或 `fgets` 代替。
3. 在显示链表时,遍历节点的字符串内容。
以下是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 函数结果状态代码
#define ERROR 0
#define OK 1
#define OVERFLOW -1
#define MAXSIZE 1000
typedef char* ElemType; // 将ElemType改为char*,表示字符串
typedef struct LNode {
char* data;
struct LNode* next;
} LNode, * Llist;
// 带头结点单向链表L的初始化
ElemType Initlist(Llist* L) {
*L = (LNode*)malloc(sizeof(LNode));
if (!L) {
return NULL;
}
(*L)->next = NULL;
return (*L)->data;
}
// 创建链表
void CreateList(Llist L) {
LNode* r, * s;
char input[MAXSIZE];
int flag = 1;
r = L;
while (flag) {
fgets(input, sizeof(input), stdin); // 用 fgets 获取字符串
if (strlen(input) == 0 || strcmp(input, "!") == 0) { // 输入 ! 结束输入
flag = 0;
} else {
s = (LNode*)malloc(sizeof(LNode));
s->data = malloc(strlen(input) + 1); // 分配内存给字符串,并复制输入内容
strcpy(s->data, input);
r->next = s;
r = s;
}
}
}
// 显示链表
void looklist(Llist L) {
LNode* p = L->next;
while (p) {
printf("%s ", p->data);
p = p->next;
}
printf("\n");
}
// 其他函数保持不变
int main() {
Llist L;
system("cls");
welcome();
if ((L = Initlist(&L)) == NULL) {
printf("链表初始化失败\n");
return 1;
}
CreateList(L);
if (change_list(L) == ERROR) {
printf("链表排序失败\n");
return 1;
}
looklist(L);
return 0;
}
```
阅读全文