C语言 链表的增删改查
时间: 2023-05-21 14:05:00 浏览: 60
链表是一种常用的数据结构,可以在内存中动态存储数据。在C语言中,可以通过指针实现链表的增删改查操作。具体来说,插入元素时,需要将要插入的结点插入到链表的合适位置,并更新链表中的指针关系;删除元素时,需要将要删除的结点从链表中移除,并更新链表中的指针关系;修改元素时,可以直接修改链表中对应结点的值;查找元素时,需要遍历整个链表,直到找到目标结点或者遍历完整个链表为止。
相关问题
c语言链表增改删查代码
以下是C语言链表增改删查的代码示例:
1.链表的定义
```c
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} Node, *LinkedList;
```
2.链表的创建
```c
LinkedList createLinkedList() {
LinkedList head = (LinkedList)malloc(sizeof(Node)); // 创建头结点
head->next = NULL; // 头结点指针域为空
return head;
}
```
3.链表的插入
```c
void insertNode(LinkedList L, int data, int position) {
Node *p = L;
int j = 0;
while (p && j < position - 1) { // 找到要插入位置的前一个结点
p = p->next;
j++;
}
if (!p || j > position - 1) { // 位置不合法
printf("插入位置不合法!\n");
return;
}
Node *newNode = (Node *)malloc(sizeof(Node)); // 创建新结点
newNode->data = data;
newNode->next = p->next;
p->next = newNode;
}
```
4.链表的删除
```c
void deleteNode(LinkedList L, int position) {
Node *p = L;
int j = 0;
while (p->next && j < position - 1) { // 找到要删除位置的前一个结点
p = p->next;
j++;
}
if (!(p->next) || j > position - 1) { // 位置不合法
printf("删除位置不合法!\n");
return;
}
Node *q = p->next; // q指向要删除的结点
p->next = q->next; // 删除结点
free(q); // 释放内存
}
```
5.链表的查找
```c
int findNode(LinkedList L, int data) {
Node *p = L->next;
int i = 1;
while (p) {
if (p->data == data) {
return i; }
p = p->next;
i++;
}
return -1; // 没有找到
}
```
C语言动态链表增删改查
好的,我可以为您介绍一下 C 语言中动态链表的增删改查操作。
首先,我们需要定义一个链表结构体:
```c
typedef struct Node {
int data;
struct Node *next;
} Node, *LinkedList;
```
其中,`data` 表示链表节点中存储的数据,`next` 表示指向下一个节点的指针。
接下来,我们可以实现链表的创建操作:
```c
LinkedList createList() {
LinkedList head = (LinkedList)malloc(sizeof(Node));
head->next = NULL;
return head;
}
```
这个函数会返回一个链表头节点的指针,也就是一个空链表。
接下来,我们可以实现链表节点的插入操作:
```c
void insertNode(LinkedList L, int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = L->next;
L->next = newNode;
}
```
这个函数会在链表头节点后插入一个新的节点。
接下来,我们可以实现链表节点的删除操作:
```c
void deleteNode(LinkedList L, int data) {
Node *p = L;
while (p->next != NULL && p->next->data != data) {
p = p->next;
}
if (p->next == NULL) {
printf("Not found!\n");
return;
}
Node *tmp = p->next;
p->next = tmp->next;
free(tmp);
}
```
这个函数会在链表中查找指定数据的节点,并删除它。
最后,我们可以实现链表节点的查找操作:
```c
Node *findNode(LinkedList L, int data) {
Node *p = L->next;
while (p != NULL && p->data != data) {
p = p->next;
}
return p;
}
```
这个函数会在链表中查找指定数据的节点,并返回它的指针。
以上就是 C 语言中动态链表的增删改查操作。