更新 'ex7_1.c'
This commit is contained in:
parent
23c8f197fc
commit
eeac176312
224
ex7_1.c
224
ex7_1.c
@ -1,78 +1,146 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<conio.h>
|
||||
#define MAX 100
|
||||
|
||||
void Search1(int a[], int n, int key){
|
||||
int i=0;
|
||||
a[n] = key;
|
||||
while(a[i] != key){
|
||||
i++;
|
||||
}
|
||||
if(i == n){
|
||||
printf("\n未找到。\n\n");
|
||||
} else {
|
||||
printf("\n此数在第 %d 位。\n\n", i + 1);
|
||||
}
|
||||
}
|
||||
void Search2(int a[], int n, int key){
|
||||
int low = 0, high = n-1, mid;
|
||||
while(low <= high){
|
||||
mid = (low + high) / 2;
|
||||
if(a[mid] == key){
|
||||
printf("\n此数在第 %d 位。\n\n", mid + 1);
|
||||
return;
|
||||
} else if (a[mid] > key){
|
||||
high = mid - 1;
|
||||
} else {
|
||||
low = mid + 1;
|
||||
}
|
||||
}
|
||||
printf("\n未找到。\n\n");
|
||||
}
|
||||
int main(){
|
||||
int n, choice, e, a[MAX];
|
||||
|
||||
for(;;){
|
||||
printf("\t\t1.无序线性表的顺序查找\n");
|
||||
printf("\t\t2.有序线性表的二分查找\n");
|
||||
printf("\t\t0.退出\n");
|
||||
|
||||
printf("请选择:");
|
||||
scanf("%d",&choice);
|
||||
if(choice==0) break;
|
||||
switch (choice) {
|
||||
case 1:
|
||||
printf("请输入需要输入的元素个数:");
|
||||
scanf("%d",&n);
|
||||
for(int i=0;i<n;i++){
|
||||
printf("请输入第 %d 个元素:",i+1);
|
||||
scanf("%d",&e);
|
||||
a[i] = e;
|
||||
}
|
||||
printf("\n请输入需要查找的元素:");
|
||||
scanf("%d",&e);
|
||||
Search1(a, n, e);
|
||||
break;
|
||||
case 2:
|
||||
printf("请输入需要输入的元素个数:");
|
||||
scanf("%d",&n);
|
||||
for(int i=0;i<n;i++){
|
||||
printf("请输入第 %d 个元素:",i+1);
|
||||
scanf("%d",&e);
|
||||
a[i] = e;
|
||||
}
|
||||
printf("\n请输入需要查找的元素:");
|
||||
scanf("%d",&e);
|
||||
Search1(a, n, e);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
printf("请按任意键继续...");
|
||||
getch();
|
||||
system("cls");
|
||||
}
|
||||
printf("感谢使用,再见\n");
|
||||
return 0;
|
||||
}
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<conio.h>
|
||||
#define MAX 100
|
||||
|
||||
void Search1(int a[], int n, int key){
|
||||
int i=0;
|
||||
a[n] = key;
|
||||
while(a[i] != key){
|
||||
i++;
|
||||
}
|
||||
if(i == n){
|
||||
printf("\n未找到。\n\n");
|
||||
} else {
|
||||
printf("\n此数在第 %d 位。\n\n", i + 1);
|
||||
}
|
||||
}
|
||||
void Search2(int a[], int n, int key){
|
||||
int low = 0, high = n-1, mid;
|
||||
while(low <= high){
|
||||
mid = (low + high) / 2;
|
||||
if(a[mid] == key){
|
||||
printf("\n此数在第 %d 位。\n\n", mid + 1);
|
||||
return;
|
||||
} else if (a[mid] > key){
|
||||
high = mid - 1;
|
||||
} else {
|
||||
low = mid + 1;
|
||||
}
|
||||
}
|
||||
printf("\n未找到。\n\n");
|
||||
}
|
||||
void InitHashList(int b[]){
|
||||
int i;
|
||||
for (i = 0; i < MAX; i++)
|
||||
b[i] = 0;
|
||||
}
|
||||
int Hash(int key){
|
||||
return (key * 3) % 7;
|
||||
}
|
||||
int Insert(int a[], int b[], int e){
|
||||
int d = Hash(e);
|
||||
int temp = d;
|
||||
while (b[d] != 0){
|
||||
d = (d + 1) % 7;
|
||||
if (d == temp){
|
||||
printf("散列表已满\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
a[d] = e;
|
||||
b[d] = 1;
|
||||
return 1;
|
||||
}
|
||||
int Search3(int a[], int b[], int key){
|
||||
int d = Hash(key);
|
||||
int temp = d;
|
||||
int p = b[d];
|
||||
while (p != 0){
|
||||
if (a[d] == key){
|
||||
return d;
|
||||
} else {
|
||||
d = (d + 1) % 7;
|
||||
p = b[d];
|
||||
}
|
||||
if(temp == d){
|
||||
break;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
void start_hash(int a[], int b[]){
|
||||
int n, e;
|
||||
InitHashList(a);
|
||||
InitHashList(b);
|
||||
printf("请输入需要输入的元素个数:");
|
||||
scanf("%d",&n);
|
||||
for(int i=0; i<n; i++){
|
||||
printf("请输入第 %d 个元素:", i+1);
|
||||
scanf("%d", &e);
|
||||
Insert(a, b, e);
|
||||
}
|
||||
printf("\n散列表为:");
|
||||
for(int i=0; i<7; i++){
|
||||
printf("%d ", a[i]);
|
||||
}
|
||||
printf("\n");
|
||||
printf("\n请输入需要查找的元素:");
|
||||
scanf("%d", &e);
|
||||
n = Search3(a, b, e);
|
||||
if(n != -1){
|
||||
printf("\n此数在第 %d 位。\n\n", n + 1);
|
||||
} else {
|
||||
printf("\n未找到。\n\n");
|
||||
}
|
||||
}
|
||||
int main(){
|
||||
int n, choice, e, a[MAX], b[MAX];
|
||||
|
||||
for(;;){
|
||||
printf("\t\t1.无序线性表的顺序查找\n");
|
||||
printf("\t\t2.有序线性表的二分查找\n");
|
||||
printf("\t\t3.利用散列表实现查找\n");
|
||||
printf("\t\t0.退出\n");
|
||||
|
||||
printf("请选择:");
|
||||
scanf("%d",&choice);
|
||||
if(choice==0) break;
|
||||
switch (choice) {
|
||||
case 1:
|
||||
printf("请输入需要输入的元素个数:");
|
||||
scanf("%d",&n);
|
||||
for(int i=0;i<n;i++){
|
||||
printf("请输入第 %d 个元素:",i+1);
|
||||
scanf("%d",&e);
|
||||
a[i] = e;
|
||||
}
|
||||
printf("\n请输入需要查找的元素:");
|
||||
scanf("%d",&e);
|
||||
Search1(a, n, e);
|
||||
break;
|
||||
case 2:
|
||||
printf("请输入需要输入的元素个数:");
|
||||
scanf("%d",&n);
|
||||
for(int i=0;i<n;i++){
|
||||
printf("请输入第 %d 个元素:",i+1);
|
||||
scanf("%d",&e);
|
||||
a[i] = e;
|
||||
}
|
||||
printf("\n请输入需要查找的元素:");
|
||||
scanf("%d",&e);
|
||||
Search1(a, n, e);
|
||||
break;
|
||||
case 3:
|
||||
start_hash(a, b);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
printf("请按任意键继续...");
|
||||
getch();
|
||||
system("cls");
|
||||
}
|
||||
printf("感谢使用,再见\n");
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user