请编写程序实现顺序表的建立、求长度、插入、删除、遍历的基本运算,其中顺序表中每一个数据元素的类型定义为学生信息的结构体,包括学号、姓名和成绩。
时间: 2023-05-26 19:05:36 浏览: 107
数据结构实验一(顺序表基本操作)题目和源程序
```cpp
#include <iostream>
#include <string>
using namespace std;
// 定义学生信息结构体
struct Student {
int id; // 学号
string name; // 姓名
double score; // 成绩
};
// 定义顺序表结构体
struct SeqList {
Student *data; // 动态分配数组
int length; // 当前长度
int maxSize; // 最大容量
};
// 初始化顺序表
void init(SeqList &L, int maxSize) {
L.data = new Student[maxSize];
L.length = 0;
L.maxSize = maxSize;
}
// 销毁顺序表
void destroy(SeqList &L) {
delete[] L.data;
L.length = 0;
L.maxSize = 0;
}
// 求顺序表长度
int length(SeqList L) {
return L.length;
}
// 插入元素
bool insert(SeqList &L, int pos, Student s) {
if (pos < 1 || pos > L.length + 1) {
// 插入位置不合法
return false;
}
if (L.length == L.maxSize) {
// 当前容量已满,无法插入
return false;
}
for (int i = L.length; i >= pos; i--) {
// 将插入位置及之后的元素后移一位
L.data[i] = L.data[i - 1];
}
L.data[pos - 1] = s;
L.length++;
return true;
}
// 删除元素
bool erase(SeqList &L, int pos) {
if (pos < 1 || pos > L.length) {
// 删除位置不合法
return false;
}
for (int i = pos; i < L.length; i++) {
// 将删除位置之后的元素前移一位
L.data[i - 1] = L.data[i];
}
L.length--;
return true;
}
// 遍历顺序表
void traverse(SeqList L) {
if (L.length == 0) {
// 空表,无法遍历
cout << "empty" << endl;
return;
}
for (int i = 0; i < L.length; i++) {
cout << L.data[i].id << " " << L.data[i].name << " " << L.data[i].score << endl;
}
}
int main() {
SeqList L;
init(L, 5); // 初始化容量为5的顺序表
// 插入学生信息
Student s1 = { 10001, "张三", 89.5 };
insert(L, 1, s1);
Student s2 = { 10002, "李四", 78.5 };
insert(L, 2, s2);
Student s3 = { 10003, "王五", 91 };
insert(L, 3, s3);
cout << "length: " << length(L) << endl;
// 遍历顺序表
traverse(L);
// 删除学生信息
erase(L, 2);
cout << "after erasing:" << endl;
traverse(L);
destroy(L); // 销毁顺序表
return 0;
}
```
阅读全文