定义港口顺序表的存储结构,实现港口表的初始化,插入(在第i个港口前插入新港口),输出(按照位序输出所有港口信息),查找(给出某港口名字,输出港口相应信息),插入(在港口表中指定的某个港口前面插入新港口),删除(将第i个港口删去),删除(给出某港口名字,从港口表中删除该港口)
时间: 2024-09-19 07:09:55 浏览: 25
港口顺序表是一种线性的数据结构,通常用于表示一组有特定顺序的港口。我们可以使用数组(Array)作为其基本存储结构,其中每个元素代表一个港口,包含了港口的名称、编号等信息。以下是关键操作的实现:
1. **存储结构**:
- 结构定义:可以使用一个动态大小的数组`PortTable[]`,其中每个元素`PortTable[i]`是一个包含港口名`name`、港口编号`index`等属性的对象。
2. **初始化**:
```cpp
void initializePortList(int capacity) {
portTable = new PortTable[capacity];
for (int i = 0; i < capacity; ++i) {
portTable[i].name = "";
portTable[i].index = i;
}
}
```
3. **插入港口 (在第i个港口前插入)**:
```cpp
void insertPortBefore(int index, string newName) {
if (index >= portTable.length()) {
// 扩容处理
}
int numPorts = countOccupiedPorts();
memmove(portTable + index + 1, portTable + index, sizeof(PortTable)*(numPorts - index));
portTable[index].name = newName;
portTable[index].index = index;
```
4. **输出港口信息 (位序输出)**:
```cpp
void printPortList() {
for (int i = 0; i < portTable.length(); ++i) {
cout << "港口" << i << ": " << portTable[i].name << endl;
}
}
```
5. **查找港口 (根据名称)**:
```cpp
Port findPortByName(string name) {
for (int i = 0; i < portTable.length(); ++i) {
if (portTable[i].name == name) {
return portTable[i];
}
}
// 如果找不到,返回空值或抛出异常
return nullptr;
}
```
6. **插入港口到指定位置 (指定索引处)**:
类似于插入到第i个位置,找到目标位置后直接插入即可。
7. **删除港口 (根据索引)**:
```cpp
void deletePortByIndex(int index) {
if (index >= 0 && index < portTable.length()) {
memmove(portTable + index, portTable + index + 1, sizeof(PortTable)*(portTable.length() - index - 1));
} else {
// 处理越界错误
}
}
```
8. **删除港口 (根据名称)**:
```cpp
void deletePortByName(string name) {
for (int i = 0; i < portTable.length(); ++i) {
if (portTable[i].name == name) {
deletePortByIndex(i);
break;
}
}
}
```