c语言HL为单链表的表头指针,试写出在该单链表中查找具有给定的元素item的算法
时间: 2024-05-12 14:19:48 浏览: 6
以下是一个简单的C语言实现:
```
struct Node {
int data;
struct Node* next;
};
struct Node* search(struct Node* HL, int item) {
struct Node* current = HL;
while (current != NULL && current->data != item) {
current = current->next;
}
return current;
}
```
该算法使用一个指针current来遍历链表,如果找到了目标元素,则返回该节点的指针,否则返回NULL。
相关问题
用C语言编写:统计单链表中具有给定x的所有元素
可以使用以下代码来统计单链表中具有给定x的所有元素:
```
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 统计单链表中具有给定x的所有元素
int count(Node* head, int x) {
int cnt = 0;
Node* p = head;
while (p != NULL) {
if (p->data == x) {
cnt++;
}
p = p->next;
}
return cnt;
}
int main() {
// 创建链表
Node* head = (Node*)malloc(sizeof(Node));
head->data = 1;
head->next = NULL;
Node* p = head;
for (int i = 2; i <= 5; i++) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = i;
node->next = NULL;
p->next = node;
p = node;
}
// 统计单链表中具有给定x的所有元素
int x = 3;
int cnt = count(head, x);
printf("单链表中具有给定%d的元素个数为%d\n", x, cnt);
// 释放链表内存
p = head;
while (p != NULL) {
Node* q = p->next;
free(p);
p = q;
}
return 0;
}
```
注意:这段代码只是一个示例,实际使用时需要根据具体情况进行修改。
单链表中查找相同元素的个数 写一个C语言代码
以下是一个用C语言实现单链表中查找相同元素的个数的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
int* countSameNodes(ListNode* head, int* returnSize) {
int* count_dict = (int*)malloc(1000 * sizeof(int));
for (int i = 0; i < 1000; i++) {
count_dict[i] = 0;
}
ListNode* cur = head;
while (cur != NULL) {
count_dict[cur->val]++;
cur = cur->next;
}
*returnSize = 1000;
return count_dict;
}
int main() {
// 创建单链表
ListNode* node1 = (ListNode*)malloc(sizeof(ListNode));
node1->val = 1;
ListNode* node2 = (ListNode*)malloc(sizeof(ListNode));
node2->val = 2;
ListNode* node3 = (ListNode*)malloc(sizeof(ListNode));
node3->val = 3;
ListNode* node4 = (ListNode*)malloc(sizeof(ListNode));
node4->val = 2;
ListNode* node5 = (ListNode*)malloc(sizeof(ListNode));
node5->val = 1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = node5;
node5->next = NULL;
// 查找相同元素个数
int size;
int* count = countSameNodes(node1, &size);
for (int i = 0; i < size; i++) {
if (count[i] > 0) {
printf("元素 %d 出现了 %d 次\n", i, count[i]);
}
}
// 释放内存
free(node1);
free(node2);
free(node3);
free(node4);
free(node5);
free(count);
return 0;
}
```
在这个示例代码中,我们定义了一个结构体ListNode来表示单链表的节点。countSameNodes函数接受单链表的头结点和一个指向整型数组大小的指针作为参数,返回一个指向整型数组的指针,该数组存储了每个元素出现的次数。在函数中,我们首先使用malloc函数动态分配了一个大小为1000的整型数组,并将其中的所有元素初始化为0。然后遍历整个链表,对于每个节点,将其对应的计数器加1。最后返回整型数组指针和数组大小。在主函数中,我们创建了一个包含5个节点的单链表,并调用countSameNodes函数查找相同元素的个数。最后释放了所有节点和动态分配的内存。