编写seqlist1.cpp,实现顺序表的定义、创建和输出操作。在seqlist1.cpp的基础上,编写一个程序prac4-2.cpp,输出在顺序表(1,2,3,4,5,6,7,8,9,10)中采用折半查找方法查找关键字9的过程。
时间: 2024-12-14 17:23:19 浏览: 15
在`seqlist1.cpp`中,我们可以首先定义一个顺序表结构体,包括一个数组和长度两个属性。然后提供函数来创建空表、插入元素、获取元素和遍历输出序列。
```cpp
#include <iostream>
// 定义顺序表
struct SeqList {
int* data;
int size;
};
// 创建空顺序表
SeqList createEmptyList() {
SeqList list;
list.data = new int[0];
list.size = 0;
return list;
}
// 插入元素到列表
void insert(SeqList& list, int value) {
if (list.size == list.data.length) {
// 扩展列表容量
int* newData = new int[list.data.length * 2];
for (int i = 0; i < list.size; ++i)
newData[i] = list.data[i];
delete[] list.data;
list.data = newData;
}
list.data[list.size++] = value;
}
// 输出顺序表
void printList(const SeqList& list) {
for (int i = 0; i < list.size; ++i)
std::cout << list.data[i] << " ";
std::cout << std::endl;
}
int main() {
SeqList myList = createEmptyList();
insert(myList, 1);
insert(myList, 2);
// ... 其他元素的插入
printList(myList); // 输出顺序表
return 0;
}
```
接下来,在`prac4-2.cpp`文件中,我们将实现折半查找功能,假设顺序表已经按照升序排列:
```cpp
#include "seqlist1.h" // 包含顺序表头文件
// 折半查找
int binarySearch(const SeqList& list, int target) {
int left = 0, right = list.size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (list.data[mid] == target)
return mid;
else if (list.data[mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return -1; // 如果找不到目标,返回-1
}
int main() {
SeqList inputList = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 给定已排序的顺序表
int keyToFind = 9;
int index = binarySearch(inputList, keyToFind);
if (index != -1)
std::cout << "Element found at index " << index << std::endl;
else
std::cout << "Element not found." << std::endl;
return 0;
}
```
阅读全文