返回
数据结构与算法之单链表,一文读懂!
后端
2023-12-09 17:22:14
单链表:概述与基本概念
在计算机科学中,单链表是一种重要的数据结构。它是一种线性结构,由一系列称为节点的元素组成。每个节点包含两个部分:数据项和指针。数据项存储实际数据,而指针指向下一个节点。这种结构允许单链表中的节点以逻辑上连续的方式连接起来,即使它们在物理内存中不一定是连续的。
单链表:操作与应用
单链表的操作主要包括遍历、插入、删除和搜索。
遍历:遍历单链表是指从头到尾访问链表中的所有节点。遍历单链表的常见方法是使用循环。
插入:插入操作是指在链表中添加一个新的节点。插入操作可以发生在链表的开头、中间或结尾。
删除:删除操作是指从链表中删除一个现有节点。删除操作可以发生在链表的开头、中间或结尾。
搜索:搜索操作是指在链表中查找一个特定的节点。搜索操作可以通过遍历链表并比较每个节点的数据项来实现。
单链表:代码示例
以下是用C语言实现的单链表的基本操作:
struct Node {
int data;
struct Node *next;
};
struct Node *head = NULL;
void insert_at_beginning(int data) {
struct Node *new_node = (struct Node *)malloc(sizeof(struct Node));
new_node->data = data;
new_node->next = head;
head = new_node;
}
void insert_at_end(int data) {
struct Node *new_node = (struct Node *)malloc(sizeof(struct Node));
new_node->data = data;
new_node->next = NULL;
if (head == NULL) {
head = new_node;
} else {
struct Node *temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = new_node;
}
}
void delete_at_beginning() {
if (head == NULL) {
return;
}
struct Node *temp = head;
head = head->next;
free(temp);
}
void delete_at_end() {
if (head == NULL) {
return;
}
if (head->next == NULL) {
free(head);
head = NULL;
return;
}
struct Node *temp = head;
while (temp->next->next != NULL) {
temp = temp->next;
}
free(temp->next);
temp->next = NULL;
}
void search(int data) {
struct Node *temp = head;
while (temp != NULL) {
if (temp->data == data) {
printf("Data found!\n");
return;
}
temp = temp->next;
}
printf("Data not found!\n");
}
void print_list() {
struct Node *temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
insert_at_beginning(10);
insert_at_beginning(20);
insert_at_end(30);
insert_at_end(40);
print_list();
search(20);
search(50);
delete_at_beginning();
delete_at_end();
print_list();
return 0;
}
单链表:延伸与拓展
单链表只是链表家族中的一个成员。其他类型的链表包括双链表、循环链表和双向循环链表。这些链表各有其优缺点,适合不同的应用场景。
在计算机科学中,单链表是一个非常重要的数据结构。它被广泛应用于各种领域,包括操作系统、编译器、数据库和图形学。单链表的简单性和灵活性使其成为许多复杂数据结构的基础。