C 语言程序如何实现二维数组去重? 您所在的位置:网站首页 二维数组如何 C 语言程序如何实现二维数组去重?

C 语言程序如何实现二维数组去重?

2023-04-11 08:06| 来源: 网络整理| 查看: 265

一种是使用额外的空间来存储不重复的元素,然后将它们复制回原数组。例如,去除一个名为arr的二维数组中的重复元素,可以使用这样的代码:

int removeDuplicates(int arr[][MAX], int m, int n){ // temp用来存储不重复的元素 int temp[m][n]; // k用来记录不重复元素的个数 int k = 0; // 遍历原数组 for (int i = 0; i < m; i++) { // flag用来标记当前元素是否已经存在于temp中 int flag = 0; for (int j = 0; j < k; j++) { // 如果当前元素和temp中的某个元素相同,就将flag置为1,跳出循环 if (memcmp(arr[i], temp[j], sizeof(arr[i])) == 0) { flag = 1; break; } } // 如果flag为0,说明当前元素是不重复的,就将它添加到temp中,并增加k的值 if (flag == 0) { memcpy(temp[k], arr[i], sizeof(arr[i])); k++; } } // 将temp中的不重复元素复制回原数组 for (int i = 0; i < k; i++) { memcpy(arr[i], temp[i], sizeof(arr[i])); } // 返回不重复元素的个数 return k;}

另一种是使用排序和双指针的方法,先将二维数组按照某种规则(快速 选择 冒泡)排序,然后用两个指针分别指向当前元素和下一个元素,如果它们相同,就跳过下一个元素,如果它们不同,就将下一个元素移动到当前元素的后面。例如,想去除一个名为arr的二维数组中的重复元素,可以使用这样的代码:

// 定义一个比较函数,用来比较两个一维数组的大小int compare(const void *a, const void *b){ // 将void指针转换为int指针 const int *x = (const int *)a; const int *y = (const int *)b; // 比较两个一维数组的第一个元素,如果相等,再比较第二个元素,以此类推 for (int i = 0; i < MAX; i++) { if (x[i] < y[i]) return -1; else if (x[i] > y[i]) return 1; }// 如果两个一维数组完全相同,返回0 return 0;}

int removeDuplicates(int arr[][MAX], int m, int n){ // 先对二维数组进行排序,使用qsort函数和自定义的比较函数 qsort(arr, m, sizeof(arr[0]), compare); // 定义两个指针i和j,初始都指向第一个元素 int i = 0, j = 0; // 遍历排序后的二维数组 while (j < m) { // 如果当前元素和下一个元素相同,就跳过下一个元素 if (j < m - 1 && compare(arr[j], arr[j + 1]) == 0) { j++; } else { // 如果当前元素和下一个元素不同,就将下一个元素移动到当前元素的后面,并更新i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有