表验证:快速验证(假设表已经排序)
表验证:
表验证问题实际上就是把一个表的每个关键字作为待查关键字,对另一个表进行重复查找。
表验证算法能识别并报告以下两种类型的不匹配情况:
(1) 关键字list1[i]的记录出现在第一个表(list1)中,但在第二个表(list2)中,没有与之相同的关键字记录。
(2) 关键字list2[i]的记录出现在第二个表(list2)中,但在第一个表(list1)中,没有与之相同的关键字记录。
#include <stdio.h> #include <stdlib.h> #define FALSE 0 #define TRUE 1 #define MAX_SIZE 100 int list1[MAX_SIZE + 1] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int n = 10; int list2[MAX_SIZE + 1] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 }; int m = 10; void list_output(int list[], int length) { int i; for (i = 0; i < length; i++) printf("%4d ", list[i]); printf("\n"); } // 假设表list1、list2已经按照从小到大的循序排列好 void verify2(int list1[], int n, int list2[], int m) { int i, j; i = j = 0; while (i < n && j < m) { if (list1[i] < list2[j]) { printf("%d is not in list2\n", list1[i]); i++; } else if (list1[i] == list2[j]) { i++; j++; } else { printf("%d is no in list1\n", list2[j]); j++; } } for (; i < n;i++) { printf("%d is not in list2\n", list1[i]); } for (; j < n; j++) { printf("%d is not in list1\n", list2[j]); } } int main() { list_output(list1, n); list_output(list2, m); verify2(list1, n, list2, m); return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。