C.code用指针打印数组元素

第一版

传首元素地址给指针,再计算数组的元素个数,用指针循环打印数组的元素

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void print(int *p,int b) {
	int i = 0;
	for (i = 0; i < b; i++) {
		printf("%d ", *(p + i));
	}
	printf("\n");
}
int main() {
	int a[] = { 1,2,3,4,5,6 };
	int b = sizeof(a) / sizeof(a[0]);
	print(&a,b);

	return 0;
}

第二版

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
	int a[] = { 1,2,3,4,5,6 };
	int b = sizeof(a) / sizeof(a[0]);
	int* p = a;
	int* q = (a + b - 1);
	while (p <= q) {
		printf("%d ", *p);
		p++;
	}
	printf("\n");
	return 0;
}

设置首元素指针的情况下再设置一个尾元素的指针,用循环一直让p指针循环打印,直到与q指针重合

可以使用哈希表来实现统计数组中出现次数最多的元素。具体步骤如下: 1. 定义一个哈希表,用来存储每个元素出现的次数。 2. 遍历数组,将每个元素作为哈希表的键值,出现的次数作为哈希表的值。 3. 遍历哈希表,找到出现次数最多的元素。 下面是具体的 C 语言代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 struct node { int key; int value; }; struct hashmap { int size; struct node **data; }; struct hashmap *create_map(int size) { struct hashmap *map = (struct hashmap *)malloc(sizeof(struct hashmap)); map->size = size; map->data = (struct node **)malloc(sizeof(struct node *) * size); for (int i = 0; i < size; i++) { map->data[i] = NULL; } return map; } int hash_code(struct hashmap *map, int key) { int code = key % map->size; if (code < 0) { code += map->size; } return code; } void put(struct hashmap *map, int key, int value) { int code = hash_code(map, key); while (map->data[code] != NULL && map->data[code]->key != key) { code = (code + 1) % map->size; } if (map->data[code] == NULL) { struct node *new_node = (struct node *)malloc(sizeof(struct node)); new_node->key = key; new_node->value = value; map->data[code] = new_node; } else { map->data[code]->value += value; } } int get(struct hashmap *map, int key) { int code = hash_code(map, key); while (map->data[code] != NULL && map->data[code]->key != key) { code = (code + 1) % map->size; } if (map->data[code] != NULL) { return map->data[code]->value; } else { return 0; } } void free_map(struct hashmap *map) { for (int i = 0; i < map->size; i++) { if (map->data[i] != NULL) { free(map->data[i]); } } free(map->data); free(map); } int most_frequent(int arr[], int len) { struct hashmap *map = create_map(MAX_SIZE); int max_freq = 0; int max_elem = 0; for (int i = 0; i < len; i++) { int freq = get(map, arr[i]); put(map, arr[i], freq + 1); if (freq + 1 > max_freq) { max_freq = freq + 1; max_elem = arr[i]; } } free_map(map); return max_elem; } int main() { int arr[] = {1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1, 1}; int len = sizeof(arr) / sizeof(int); int res = most_frequent(arr, len); printf("The most frequent element is %d\n", res); return 0; } ``` 这段代码中,我们首先定义了哈希表的数据结构 `struct hashmap`,其中包含了一个指向节点数组指针 `data`,以及哈希表的大小 `size`。节点的数据结构 `struct node` 包含了键值 `key` 和值 `value`。 在 `create_map` 函数中,我们创建了一个指定大小的哈希表,并将每个节点初始化为 `NULL`。 在 `hash_code` 函数中,我们使用取模运算将键值映射到哈希表中的索引位置。 在 `put` 函数中,我们首先计算出哈希值,然后遍历节点数组,找到一个空节点或者键值相同的节点,将值加上给定的值。如果没有找到空节点,就创建一个新节点。 在 `get` 函数中,我们首先计算出哈希值,然后遍历节点数组,找到键值相同的节点,返回其值。如果没有找到相同的节点,就返回 0。 在 `most_frequent` 函数中,我们遍历数组,对每个元素进行哈希表操作,更新出现次数最多的元素和其出现次数。最后释放哈希表的内存。 在 `main` 函数中,我们定义了一个数组 `arr`,并调用 `most_frequent` 函数来找到出现次数最多的元素,将其打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值