(1)实现线性表顺序存储(数据类型为int类型或char类型), ①创建文件exp1-1-1.cpp随机输入5个字符(或对于给定的5个字符a,b,c,d,e),创建顺序表;求长度;获取第3个元素的值;在第4个元素前插入元素g,删除第5个元素,销毁创建的线性表。
时间: 2024-10-02 20:00:41 浏览: 40
要实现线性表顺序存储,首先我们需要定义一个结构体或类来表示节点,然后用数组或者动态内存分配来存储这些节点。这里我会为你提供一个使用C++的`std::vector`来实现的简单示例,它可以直接用于存储`int`类型的元素,但也可以稍作修改以处理`char`类型的元素。
```cpp
#include <iostream>
#include <vector>
#include <string>
// 定义一个简单的节点结构,假设我们使用int类型
struct Node {
int data;
Node* next; // 指针指向下一个节点
};
// 创建线性表并读取随机字符
void createSequenceList(std::string input) {
std::vector<Node*> list;
Node* current = nullptr;
for (size_t i = 0; i < input.size(); ++i) {
char ch = input[i];
Node newNode;
newNode.data = static_cast<int>(ch); // 将字符转换为整数
newNode.next = current;
list.push_back(&newNode);
current = &newNode;
}
list[0]->next = nullptr; // 设置最后一个元素的next指针为nullptr
// 函数中的其他操作
}
// 求长度
size_t lengthOfList(Node* head) {
size_t len = 0;
while (head) {
++len;
head = head->next;
}
return len;
}
// 获取第3个元素
int getThirdElement(Node* head) {
if (lengthOfList(head) >= 3) {
return head->next->next->data;
} else {
throw std::runtime_error("列表长度小于3,无法获取第三项");
}
}
// 在第4个元素前插入元素g
void insertBeforeFourthElement(Node*& head, int value) {
if (lengthOfList(head) >= 4) {
Node* newFourth = new Node{value, head->next->next};
head->next->next->prev = newFourth; // 更新插入位置的前一个节点的next指针
newFourth->next = head->next->next;
head->next->next = newFourth;
} else {
throw std::runtime_error("列表长度小于4,无法插入元素");
}
}
// 删除第5个元素
void deleteFifthElement(Node*& head) {
if (lengthOfList(head) >= 5) {
Node* fifth = head->next->next->next;
if (fifth) { // 防止越界
fifth->prev->next = fifth->next;
delete fifth;
}
} else {
throw std::runtime_error("列表长度小于5,无法删除第五项");
}
}
// 销毁线性表(释放所有节点)
void destroySequenceList(Node** head) {
Node* temp = *head;
while (temp != nullptr) {
Node* next = temp->next;
delete temp;
temp = next;
}
*head = nullptr;
}
int main() {
std::string input = "abcde"; // 假设用户输入
createSequenceList(input);
// 进行操作...
Node* head = list.begin(); // 获取头结点
std::cout << "Length of the list: " << lengthOfList(head) << std::endl;
std::cout << "Third element: " << getThirdElement(head) << std::endl;
// 插入、删除和销毁操作...
return 0;
}
```
阅读全文