4、用结构体和指针实现单链表的应用,具体包含:建立单链表、在单链表中查找指定元素、在单链表中插入指定元素、删除单链表某个元素。
时间: 2024-05-05 09:22:40 浏览: 122
首先我们需要定义单链表的结构体,包含一个数据域和一个指向下一个节点的指针:
```c
typedef struct Node {
int data;
struct Node *next;
} Node;
```
接下来我们可以定义一些操作函数,来实现单链表的应用。
1. 建立单链表
```c
Node* createLinkedList(int arr[], int n) {
Node *head = (Node*)malloc(sizeof(Node));
head->next = NULL;
Node *tail = head;
for (int i = 0; i < n; i++) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
tail->next = newNode;
tail = newNode;
}
return head;
}
```
该函数接受一个整型数组和数组长度,返回一个指向单链表头节点的指针。它首先创建一个空的头节点,然后遍历数组,创建新节点,将其插入到链表末尾。
2. 在单链表中查找指定元素
```c
Node* findNode(Node *head, int target) {
Node *p = head->next;
while (p) {
if (p->data == target) {
return p;
}
p = p->next;
}
return NULL;
}
```
该函数接受一个指向单链表头节点的指针和一个目标值,返回指向目标节点的指针。它从头节点开始遍历链表,逐个比较节点的值,直到找到目标节点或遍历完整个链表。
3. 在单链表中插入指定元素
```c
void insertNode(Node *head, int target, int value) {
Node *p = head->next;
while (p) {
if (p->data == target) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = p->next;
p->next = newNode;
return;
}
p = p->next;
}
}
```
该函数接受一个指向单链表头节点的指针、一个目标值和一个待插入的值,将新节点插入到目标节点后面。它从头节点开始遍历链表,逐个比较节点的值,找到目标节点后,创建新节点,并将其插入到目标节点后面。
4. 删除单链表某个元素
```c
void deleteNode(Node *head, int target) {
Node *p = head->next;
Node *prev = head;
while (p) {
if (p->data == target) {
prev->next = p->next;
free(p);
return;
}
prev = p;
p = p->next;
}
}
```
该函数接受一个指向单链表头节点的指针和一个目标值,删除指定节点。它从头节点开始遍历链表,逐个比较节点的值,找到目标节点后,将其从链表中删除,并释放内存。
阅读全文