编写在顺序表和带头结点的单链表上,统计出值为x的元素个数的算法,统计结果由函数值返回。代码需要给出主函数以处理输入输出。 样例输入: 6 1 2 3 4 3 5 3C语言描述
时间: 2024-09-28 18:09:27 浏览: 61
链表-使用C语言实现带头结点的单链表.zip
为了编写一个能统计序列中值为`x`的元素个数的函数,并在一个顺序表(数组)和一个带头节点的单链表上都能运行,我们可以选择两种不同的数据结构实现:
**顺序表(数组)实现**:
```c
#include <stdio.h>
// 定义顺序列表结构体
typedef struct {
int data;
int count; // 记录特定值的数量
} ArrayNode;
// 动态分配和初始化数组
ArrayNode* create_array(int size, int x) {
ArrayNode *array = (ArrayNode*)malloc(size * sizeof(ArrayNode));
for (int i = 0; i < size; ++i) {
array[i].data = x;
array[i].count = 0;
}
return array;
}
// 统计值为x的元素个数
void count_in_array(ArrayNode* arr, int value, int* result) {
*result = 0;
for (int i = 0; i < arr->count; ++i) {
if (arr[i].data == value) {
(*result)++;
}
}
}
// 主函数示例
int main() {
int input[] = {6, 1, 2, 3, 4, 3, 5}; // 示例输入
int size = sizeof(input) / sizeof(input[0]);
int target = 3;
int count = 0;
ArrayNode* array = create_array(size, target);
count_in_array(array, target, &count);
printf("在顺序表中值为%d的元素个数: %d\n", target, count);
// 清理内存
free(array);
return 0;
}
```
**单链表实现**:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} ListNode;
// 创建单链表并插入值为x的节点
ListNode* create_linked_list(int* input, int size, int x) {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->data = x;
head->next = NULL;
ListNode* current = head;
for (int i = 1; i < size; ++i) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = input[i];
newNode->next = current->next;
current->next = newNode;
current = newNode;
}
return head;
}
// 遍历链表统计值为x的元素个数
int count_in_linked_list(ListNode* node, int value, int* result) {
*result = 0;
while (node != NULL) {
if (node->data == value) {
(*result)++;
}
node = node->next;
}
}
// 主函数示例
int main() {
int input[] = {6, 1, 2, 3, 4, 3, 5}; // 示例输入
int size = sizeof(input) / sizeof(input[0]);
int target = 3;
int count = 0;
ListNode* linkedList = create_linked_list(input, size, target);
count_in_linked_list(linkedList, target, &count);
printf("在链表中值为%d的元素个数: %d\n", target, count);
// 清理内存
free(linkedList);
return 0;
}
```
这两个主函数分别用于处理顺序表和单链表的输入输出,统计特定值的个数。记得在使用完数据结构后释放内存以避免内存泄漏。
阅读全文