C语言数据结构单链表的冒泡排序和查找
时间: 2023-07-11 08:51:49 浏览: 123
数据介个啊
好的,下面是C语言单链表的冒泡排序和查找的实现方法:
1. 单链表的冒泡排序
冒泡排序是一种简单的排序算法,它重复地遍历要排序的元素,比较相邻的两个元素大小,并根据大小交换位置,直到没有任何一对数字需要比较为止。在单链表中,需要交换节点的指针而不是节点的数据。
```
void bubble_sort(struct node *head) {
struct node *p, *q, *end = NULL;
while (head != end) {
p = head;
while (p->next != end) {
q = p->next;
if (p->data > q->data) {
int tmp = p->data;
p->data = q->data;
q->data = tmp;
}
p = p->next;
}
end = p;
}
}
```
上面的代码中,`head` 是链表的头指针,`end` 是排序的结束位置。每次排序结束后,`end` 移动到上一次排序中最后一个节点的位置。内循环中的 `p` 指向当前节点,`q` 指向它后面的节点。如果 `p` 的数据大于 `q` 的数据,交换它们的值。
2. 单链表的查找
单链表的查找和数组的查找类似,也是遍历整个链表,依次比较每个节点的值和目标值是否相等。如果找到了相等的节点,返回该节点的指针,否则返回 NULL。
```
struct node *search(struct node *head, int value) {
struct node *p = head;
while (p != NULL) {
if (p->data == value) {
return p;
}
p = p->next;
}
return NULL;
}
```
上面的代码中,`head` 是链表的头指针,`value` 是要查找的值。每次循环中,`p` 指向当前节点,如果当前节点的值等于目标值,返回该节点的指针。如果遍历完整个链表都没有找到相等的节点,返回 NULL。
阅读全文