1、编写一个程序,实现顺序表的各种基本运算(假设顺序表的元素类型为char或者 int),并在此基础上设计一个主程序完成功能调试。 2、编写算法,实现顺序表中元素的逆置,并在应用程序中调用显示结果在顺序表中查找值为 a的元素的位置(可能不只一处)。
时间: 2024-09-27 09:08:06 浏览: 34
1. 编写一个顺序表(也称线性表)的基本操作程序,通常会包含以下几个步骤:
```c++
#include <iostream>
using namespace std;
// 定义顺序表结构体
template <typename T>
class SequentialList {
public:
SequentialList(int size) : data(new T[size]), capacity(size), count(0) {}
// 插入元素
void insert(T value) {
if (count == capacity)
resize(capacity * 2); // 当满时,扩容一倍
data[count++] = value;
}
// 删除元素
void remove(int index) {
if (index >= 0 && index < count) {
memmove(&data[index], &data[index + 1], (count - index - 1) * sizeof(T));
count--;
}
}
// 查找元素
int find(T value) const {
for (int i = 0; i < count; i++) {
if (data[i] == value)
return i;
}
return -1;
}
// 显示顺序表内容
void display() const {
for (int i = 0; i < count; i++)
cout << data[i] << " ";
cout << endl;
}
private:
T* data; // 存储数据的数组
int capacity, count; // 当前容量和元素数量
// 扩容函数
void resize(int new_capacity) {
T* newData = new T[new_capacity];
copy(data, data + count, newData);
delete[] data;
data = newData;
capacity = new_capacity;
}
};
// 主程序示例
int main() {
SequentialList<char> strList(5);
strList.insert('a');
strList.insert('b');
strList.insert('c');
strList.display(); // 输出: a b c
strList.remove(1); // 删除 'b'
strList.display(); // 输出: a c
int index = strList.find('c'); // 查找 'c' 的位置,返回 1
cout << "Element 'c' found at position: " << index << endl;
return 0;
}
```
2. 对于元素逆置,我们可以修改插入操作,将其插入到列表前端,然后实现一个简单的逆序函数:
```c++
void reverse(SequentialList<T>& list) {
int start = 0, end = count - 1;
while (start < end) {
swap(list.data[start], list.data[end]);
start++;
end--;
}
}
```
应用到上面的主程序中:
```c++
main() {
// ... 其他代码 ...
reverse(strList); // 逆序顺序表
strList.display(); // 输出逆序后的顺序表
// ... 查找 'a' 的位置 ...
}
```
阅读全文