/* sequence search and binary search,Nothing to say*/ #include "/usr/c/head.h" #define EQ(x, y) ((x) == (y)) #define LT(x, y) ((x) < (y)) #define LQ(x, y) ((x) <= (y)) typedef int key_type; typedef struct elem_type { key_type * data; int len; }sstable; int search_seq(sstable * elem, key_type x) { int i; elem->data[0] = x; for (i = elem->len; !EQ(elem->data[i], x); --i); return i; } int search_bin(sstable elem, key_type x) { int low, high, mid; low = 1; high = elem.len; while(low <= high) { mid = (low + high) / 2; if (EQ(x, elem.data[mid])) return mid; else if (LT(x, elem.data[mid])) high = mid - 1; else low = mid + 1; } return 0; } int main(void) { int n, i, temp; sstable elem; key_type x; printf("How many numbers:"); SCAN_INT(n, temp); elem.data = (key_type *)malloc(sizeof(key_type) * (n + 1)); if (!elem.data) exit(OVERFLOW); for (i = 1; i <= n; ++i) { printf("No.%d:", i); SCAN_INT(elem.data[i], temp); } elem.len = n; printf("Which do you want:"); SCAN_INT(x, temp); printf("Position1 = %d./n", search_seq(&elem, x)); printf("Position2 = %d./n", search_bin(elem, x)); return 0; }