C语言实现单链表的完整使用攻略
什么是单链表
单链表是一种常见的数据结构,它的每个节点包含两部分内容,一个是存放数据的数据域,另一个是指向下一个节点的指针域。单链表的特点是插入和删除操作非常快,但查询操作相对较慢。
单链表的实现步骤
实现一个单链表需要以下步骤:
- 定义节点结构体:定义一个结构体,包含数据域和指针域两个成员。
- 创建节点:通过malloc函数动态分配内存,创建一个新节点。
- 插入节点:在链表中插入一个新节点,需要遍历链表找到合适的位置,对链表进行指针调整。
- 删除节点:在链表中删除一个节点,同样需要遍历链表找到要删除的节点,对链表进行指针调整。
- 遍历链表:遍历链表,将链表中的每个节点的数据打印出来。
C语言实现单链表示例
以下示例程序实现了一个单链表,其中节点的数据域是一个整数,程序支持插入、删除和遍历三个操作,具体代码和注释见下:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct node {
int data;
struct node* next;
}Node;
// 插入节点
void insert(Node* head, int i) {
// 创建一个新节点,将数据赋值为i
Node* p = (Node*)malloc(sizeof(Node));
p->data = i;
p->next = NULL;
// 找到链表的最后一个节点
Node* last = head;
while (last->next) {
last = last->next;
}
// 将新节点插入到链表中
last->next = p;
}
// 删除节点
void del(Node* head, int i) {
// 找到要删除的节点的前一个节点
Node* p = head;
while (p->next && p->next->data != i) {
p = p->next;
}
if (p->next) {
// 将要删除的节点从链表中移除
Node* temp = p->next;
p->next = p->next->next;
free(temp);
}
}
// 遍历链表
void print(Node* head) {
Node* p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
// 定义链表头节点
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
// 插入数据
insert(head, 1);
insert(head, 2);
insert(head, 3);
// 打印链表
print(head);
// 删除数据
del(head, 2);
// 打印链表
print(head);
// 释放内存
Node* p = head->next;
while (p) {
Node* temp = p;
p = p->next;
free(temp);
}
free(head);
return 0;
}
单链表的另一个示例
以下示例程序实现了一个链表,其中节点的数据域是一个字符串,程序支持插入、删除和遍历三个操作,具体代码和注释见下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义链表节点结构体
typedef struct node {
char data[50];
struct node* next;
}Node;
// 插入节点
void insert(Node* head, char* str) {
// 创建一个新节点,将数据赋值为str
Node* p = (Node*)malloc(sizeof(Node));
strcpy(p->data, str);
p->next = NULL;
// 找到链表的最后一个节点
Node* last = head;
while (last->next) {
last = last->next;
}
// 将新节点插入到链表中
last->next = p;
}
// 删除节点
void del(Node* head, char* str) {
// 找到要删除的节点的前一个节点
Node* p = head;
while (p->next && strcmp(p->next->data ,str) != 0) {
p = p->next;
}
if (p->next) {
// 将要删除的节点从链表中移除
Node* temp = p->next;
p->next = p->next->next;
free(temp);
}
}
// 遍历链表
void print(Node* head) {
Node* p = head->next;
while (p) {
printf("%s ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
// 定义链表头节点
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
// 插入数据
insert(head, "Hello");
insert(head, "World");
insert(head, "C");
// 打印链表
print(head);
// 删除数据
del(head, "World");
// 打印链表
print(head);
// 释放内存
Node* p = head->next;
while (p) {
Node* temp = p;
p = p->next;
free(temp);
}
free(head);
return 0;
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现单链表 - Python技术站