C语言中单链表的基本操作指南如下:
单链表
单链表是一种线性结构,具有链式存储的特点,即用指针相连的方式存储数据。单链表的每个节点包含一个数据域和一个指向下一个节点的指针域。单链表与数组相比,其插入和删除操作效率较高,但是查找效率较低。
在C语言中,可以使用结构体和指针实现单链表。如下所示,Node结构体表示单链表中的一个节点,包含一个数据成员和一个指向下一个节点的指针成员。
typedef struct Node {
int data;
struct Node *next;
} Node;
单链表操作
创建单链表
创建一个单链表,需要定义头节点,并让其指向NULL。创建一个新节点时,将其指针域指向头节点,再将头节点指向新节点。如下所示,createList函数创建一个带头节点的单链表,并返回头节点指针。
Node *createList() {
Node *head = (Node *)malloc(sizeof(Node));
head->next = NULL;
return head;
}
插入节点
单链表的插入操作包括头插法和尾插法。头插法是指在链表头部插入节点,尾插法是指在链表尾部插入节点。
头插法
头插法的思路是,先创建一个新节点,然后将其指针域指向原头节点指向的节点,再将头节点指针域指向新节点。
以下是头插法的代码示例:
void insertHead(Node *head, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = head->next;
head->next = newNode;
}
尾插法
尾插法的思路是,遍历链表找到最后一个节点,然后在其后面插入一个新节点。
以下是尾插法的代码示例:
void insertTail(Node *head, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
Node *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
删除节点
单链表的删除操作包括删除头节点和删除其他节点。
删除头节点
删除头节点的思路是,先保存头节点的指针,然后将头节点的指针域指向下一个节点,最后释放原头节点的内存空间。
以下是删除头节点的代码示例:
void deleteHead(Node *head) {
Node *p = head->next;
head->next = p->next;
free(p);
}
删除其他节点
删除其他节点的思路是,先找到要删除的节点的前一个节点,将前一个节点的指针域指向要删除节点的下一个节点,最后释放要删除节点的内存空间。
以下是删除其他节点的代码示例:
void deleteNode(Node *head, int data) {
Node *p = head;
while (p->next != NULL) {
if (p->next->data == data) {
Node *q = p->next;
p->next = q->next;
free(q);
return;
}
p = p->next;
}
}
修改节点
修改节点的思路是,先找到要修改的节点,然后修改其数据域的值。
以下是修改节点的代码示例:
void modifyNode(Node *head, int data, int newData) {
Node *p = head->next;
while (p != NULL) {
if (p->data == data) {
p->data = newData;
return;
}
p = p->next;
}
}
查找节点
查找节点的思路是,遍历整个链表,找到与目标数据相等的节点。
以下是查找节点的代码示例:
Node *findNode(Node *head, int data) {
Node *p = head->next;
while (p != NULL) {
if (p->data == data) {
return p;
}
p = p->next;
}
return NULL;
}
示例说明
示例1:用尾插法创建一个带头节点的单链表,再在头插法和尾插法的基础上分别插入10个节点,最后输出链表
Node *head = createList();
for (int i = 1; i <= 10; i++) {
insertHead(head, i);
}
for (int i = 1; i <= 10; i++) {
insertTail(head, i);
}
Node *p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
示例2:创建一个带头节点的单链表,插入10个节点,查找值为5的节点并输出,修改值为5的节点的数据值为55后输出,删除第一个节点,并输出链表
Node *head = createList();
for (int i = 1; i <= 10; i++) {
insertTail(head, i);
}
Node *p = findNode(head, 5);
if (p != NULL) {
printf("%d ", p->data);
}
modifyNode(head, 5, 55);
p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
deleteHead(head);
p = head->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中单链表的基本操作指南(增删改查) - Python技术站