(1) 建立一个数据为整数的顺序表。根据用户输入的查找值,实现顺序表的顺序查找。 (2) 建立一个有序的整数构成的顺序表,根据用户输入的查找值,实现二分查找,并输出比较的元素,提示是否查找成功。要求实现递归和非递归算法。C++
时间: 2024-03-20 21:43:04 浏览: 59
数据结构与算法c++实现 两个顺序表的元素严格单调递增,将其共同元素保存到新顺序表中,且为递增排序
5星 · 资源好评率100%
好的,我已经了解了您的问题。下面是两个问题的解答:
1. 顺序查找
顺序查找的基本思想是从表的一端开始,逐个比较表中的元素,直到查找到或查找完为止。以下是顺序查找的代码实现:
```c++
#include<iostream>
using namespace std;
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE]; // 存放顺序表元素的数组
int length; // 记录顺序表的长度
}Sqlist;
// 顺序查找函数
int sequentialSearch(Sqlist L, int key) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == key) {
return i; // 返回查找值在顺序表中的下标
}
}
return -1; // 表示查找失败
}
int main() {
Sqlist L;
int key;
cout << "请输入顺序表的长度:";
cin >> L.length;
cout << "请输入顺序表元素:";
for (int i = 0; i < L.length; i++) {
cin >> L.data[i];
}
cout << "请输入要查找的值:";
cin >> key;
int index = sequentialSearch(L, key);
if (index == -1) {
cout << "查找失败!" << endl;
}
else {
cout << "查找成功,值为" << key << "的元素下标为:" << index << endl;
}
return 0;
}
```
2. 二分查找
二分查找也称为折半查找,是一种基于分治思想的查找算法。二分查找的前提条件是顺序表有序,基本思想是在查找过程中将查找区间逐渐缩小,直到找到查找值为止。以下是递归和非递归两种算法的代码实现:
```c++
#include<iostream>
using namespace std;
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
int data[MAXSIZE]; // 存放顺序表元素的数组
int length; // 记录顺序表的长度
}Sqlist;
// 非递归实现二分查找
int binarySearch(Sqlist L, int key) {
int low = 0, high = L.length - 1;
int mid;
while (low <= high) {
mid = (low + high) / 2;
if (L.data[mid] == key) {
return mid;
}
else if (L.data[mid] > key) {
high = mid - 1;
}
else {
low = mid + 1;
}
}
return -1;
}
// 递归实现二分查找
int binarySearch(Sqlist L, int key, int low, int high) {
if (low > high) {
return -1;
}
int mid = (low + high) / 2;
if (L.data[mid] == key) {
return mid;
}
else if (L.data[mid] > key) {
return binarySearch(L, key, low, mid - 1);
}
else {
return binarySearch(L, key, mid + 1, high);
}
}
int main() {
Sqlist L;
int key;
cout << "请输入顺序表的长度:";
cin >> L.length;
cout << "请输入有序顺序表元素:";
for (int i = 0; i < L.length; i++) {
cin >> L.data[i];
}
cout << "请输入要查找的值:";
cin >> key;
int index1 = binarySearch(L, key);
int index2 = binarySearch(L, key, 0, L.length - 1);
if (index1 == -1) {
cout << "非递归算法:查找失败!" << endl;
}
else {
cout << "非递归算法:查找成功,值为" << key << "的元素下标为:" << index1 << endl;
}
if (index2 == -1) {
cout << "递归算法:查找失败!" << endl;
}
else {
cout << "递归算法:查找成功,值为" << key << "的元素下标为:" << index2 << endl;
}
return 0;
}
```
希望我的回答能够帮到您,如果您还有其他问题,请随时问我。
阅读全文