

为什么没出错 但是并没有显示我想要的单链表形式呢 好难理解啊 但是我在啊哈c上面能运行出来数据,但是显示的也不是我想要的 我想知道我的代码到底这么回事 纯手敲的 第一次接触数据结构 在慢慢学习中


以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
在C语言中,单链表是一种常见的线性数据结构,用于存储元素,并允许对它们进行添加、删除操作以及获取特定元素的信息。
单链表由一系列节点组成,每个节点包含一个指向下一个节点的指针(称为next)。单链表的基本操作包括:
要创建一个空的单链表,可以使用以下代码片段:
#include <stdio.h>
#define MAX_SIZE 100 // 定义最大节点数量
typedef struct Node {
char *name; // 节点名称
char *start; // 节点开始时间
char *end; // 节点结束时间
char *date; // 节点日期
int price; // 节点票价
} Ticket;
struct Node *head = NULL; // 初始化头结点为空
void initList(struct Node **head) {
/* 初始化头结点 */
head = malloc(sizeof(struct Node)); // 分配内存空间
}
接下来,我们实现插入数据的功能:
void insertData(struct Node **head, char *name, char *start, char *end, char *date, int price) {
Ticket *newTicket = malloc(sizeof(Ticket)); // 分配内存空间
if (newTicket != NULL) {
strcpy(newTicket->name, name); // 设置节点名称
strcpy(newTicket->start, start); // 设置节点开始时间
strcpy(newTicket->end, end); // 设置节点结束时间
strcpy(newTicket->date, date); // 设置节点日期
newTicket->price = price; // 设置节点票价
Ticket *temp = *head; // 指向当前头结点
while (temp->next != NULL) { // 找到最后一个节点
temp = temp->next;
}
temp->next = newTicket; // 将新节点插入到最后
}
}
为了删除节点,我们可以简单地更新它的前驱节点的next指针:
void deleteNode(struct Node **head, char *name) {
Ticket *current = *head;
Ticket *prev = NULL;
while (current != NULL && strcmp(current->name, name)) {
prev = current;
current = current->next;
}
if (current == NULL) return; // 如果没有找到目标节点
if (prev == NULL) {
*head = current->next; // 删除头结点
} else {
prev->next = current->next; // 更新前驱节点的next指针
}
free(current); // 移动指针释放内存
}
对于遍历链表,我们需要遍历整个链表以确保安全地访问所有的节点:
void traverseList(struct Node *head) {
Ticket *current = head;
printf("车次名:%s\n出发地:%s\n目的地:%s\n时间:%s\n价格:%d\n", current->name, current->start, current->end, current->date, current->price);
current = current->next;
while (current != NULL) {
printf("\n\t%-10s\t%-10s\t%-10s\t%-10s\t%d\n", current->name, current->start, current->end, current->date, current->price);
current = current->next;
}
}
最后,我们将这些功能组合在一起,形成主函数main:
int main() {
struct Node *head = NULL;
initList(&head);
insertData(&head, "k214", "Xinxiang", "Beijing", "2024-10-1", 200);
insertData(&head, "k322", "Tianjin", "Nanjing", "2024-9-30", 300);
insertData(&head, "k431", "Shanghai", "Hangzhou", "2024-11-1", 150);
traverseList(head);
deleteNode(&head, "k114");
traverseList(head);
return 0;
}
以上就是如何使用C语言创建和操作单链表的一个基本示例。注意,这个例子非常基础,实际应用中可能需要处理更多的复杂情况,如错误处理、性能优化等。