用C++ 实现顺序表的初始化功能,建立一个空表;用表尾插入算法向表中置入若干元素;用指定位置的插入和删除,用遍历输出功能验证之,并实现对顺序表的所有操作算法,并对已建顺序表进行操作,需包含核心操作。
时间: 2024-10-09 16:02:12 浏览: 20
在C++中,我们通常使用数组来实现简单的顺序表数据结构。以下是创建一个空顺序表、插入元素、插入和删除以及遍历输出的基本步骤:
```cpp
#include <iostream>
// 定义顺序表节点结构体
struct Node {
int data;
Node* next; // 指向下一个节点的指针
};
// 创建一个空顺序表的函数
Node* createEmptyList() {
return nullptr;
}
// 在表尾插入元素的函数
void insertAtTail(Node** head, int value) {
if (*head == nullptr) { // 如果表为空
*head = new Node{value, nullptr}; // 新建头结点
} else {
Node* current = *head;
while (current->next != nullptr) {
current = current->next;
}
current->next = new Node{value, nullptr}; // 插入新元素
}
}
// 在指定位置插入元素的函数
void insertAtPosition(Node** head, int position, int value) {
if (position <= 0 || position > getLength(*head)) {
std::cout << "Invalid position!\n";
return;
}
Node* newNode = new Node{value, nullptr};
if (position == 1) {
newNode->next = *head;
*head = newNode;
} else {
Node* prev = *head;
for (int i = 1; i < position - 1 && prev != nullptr; ++i) {
prev = prev->next;
}
if (prev != nullptr) {
newNode->next = prev->next;
prev->next = newNode;
}
}
}
// 删除指定位置元素的函数
void deleteElement(Node** head, int position) {
if (position <= 0 || position > getLength(*head)) {
std::cout << "Invalid position!\n";
return;
}
if (position == 1) {
Node* temp = *head;
*head = (*head)->next;
delete temp;
} else {
Node* prev = *head;
for (int i = 1; i < position - 1 && prev != nullptr; ++i) {
prev = prev->next;
}
if (prev != nullptr) {
prev->next = prev->next->next;
delete prev->next;
}
}
}
// 遍历并输出顺序表的函数
void printList(const Node* head) {
Node* current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << "\n";
}
// 计算列表长度的辅助函数
size_t getLength(const Node* head) {
size_t count = 0;
Node* temp = head;
while (temp != nullptr) {
++count;
temp = temp->next;
}
return count;
}
int main() {
Node* list = createEmptyList();
// 插入元素
insertAtTail(&list, 1);
insertAtTail(&list, 2);
insertAtTail(&list, 3);
// 输出验证
printList(list); // 应该输出 "1 2 3"
// 插入和删除
insertAtPosition(&list, 2, 4);
deleteElement(&list, 1);
// 再次输出验证
printList(list); // 应该输出 "2 4 3"
return 0;
}
```
阅读全文