先依次输入元素为简单类型(int、char)或自定义结构体类型(如订单信息或学生信息或员工信息)的数个数据元素建立顺序存储的线性表,然后①以该线性表为查找表进行顺序查找;②用冒泡排序对该线性表按某个关键字值进行排序,在排序之后的线性表之上进行折半查找。
时间: 2024-02-17 10:04:48 浏览: 100
26、【C语言高级数据类型】结构体.rar
好的,这是一个关于线性表的问题,需要建立顺序存储结构。建立顺序存储结构的过程中,需要使用数组来存储数据元素。
以下是示例代码:
```c++
#include <iostream>
using namespace std;
// 定义元素类型
struct Student {
int id;
string name;
int age;
};
// 定义线性表类型
template <typename T>
class SeqList {
private:
T* data; // 数据域
int maxSize; // 线性表最大长度
int length; // 线性表当前长度
public:
SeqList(int size) : maxSize(size), length(0) {
data = new T[maxSize];
}
~SeqList() {
delete[] data;
}
// 插入元素
bool insert(T elem) {
if (length == maxSize) {
return false;
}
data[length] = elem;
length++;
return true;
}
// 顺序查找
int seqSearch(T key) {
for (int i = 0; i < length; i++) {
if (data[i] == key) {
return i;
}
}
return -1;
}
// 冒泡排序
void bubbleSort() {
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if (data[j] > data[j + 1]) {
T temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
}
}
// 折半查找
int binarySearch(T key) {
int left = 0;
int right = length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (data[mid] == key) {
return mid;
} else if (data[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
};
int main() {
// 创建线性表
SeqList<Student> list(5);
// 插入元素
Student s1 = {1001, "Tom", 18};
Student s2 = {1002, "Jerry", 20};
Student s3 = {1003, "Lucy", 19};
list.insert(s1);
list.insert(s2);
list.insert(s3);
// 顺序查找
int index = list.seqSearch(s2);
cout << "顺序查找结果:" << index << endl;
// 冒泡排序
list.bubbleSort();
// 折半查找
index = list.binarySearch(s2);
cout << "折半查找结果:" << index << endl;
return 0;
}
```
这段代码中,我们首先定义了元素类型 `Student`,包含学号、姓名和年龄三个属性。
然后我们定义了线性表类型 `SeqList`,使用模板来支持不同类型的数据元素。在 `SeqList` 类中,我们定义了插入元素、顺序查找、冒泡排序和折半查找等功能。
在 `main` 函数中,我们创建了一个 `SeqList` 类型的线性表 `list`,并插入了三个学生信息。
接着,我们使用顺序查找函数查找了学号为 `1002` 的学生信息,并输出了结果。
然后,我们使用冒泡排序函数对线性表进行排序,并使用折半查找函数查找了学号为 `1002` 的学生信息,并输出了结果。
注意:本示例代码只是演示了线性表的基本操作,实际应用中需要根据具体情况进行调整。
阅读全文