用C++语言1.实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。程序运行时要求能输入数据
时间: 2024-10-23 22:13:54 浏览: 39
在C++中,我们可以创建一个简单的单链表结构来实现这些基本操作。首先,我们需要定义一个节点类`Node`,包含数据成员`data`和指向下一个节点的指针`next`,以及头结点类`LinkedList`。以下是基础操作的实现:
```cpp
#include <iostream>
// 定义链表节点
class Node {
public:
int data;
Node* next;
Node(int value) : data(value), next(nullptr) {}
};
// 链表类
class LinkedList {
private:
Node* head; // 头结点
public:
LinkedList() : head(nullptr) {}
// 添加元素到链表尾部
void insert(int value) {
if (!head) {
head = new Node(value);
} else {
Node* current = head;
while (current->next) {
current = current->next;
}
current->next = new Node(value);
}
}
// 获取链表长度
size_t length() const {
size_t count = 0;
Node* temp = head;
while (temp) {
++count;
temp = temp->next;
}
return count;
}
// 取元素
int get(int index) {
if (index >= 0 && index < length()) {
Node* temp = head;
for (int i = 0; i < index; i++) {
temp = temp->next;
}
return temp->data;
} else {
throw std::out_of_range("Index out of range");
}
}
// 修改元素
void set(int index, int newValue) {
if (index >= 0 && index < length()) {
Node* temp = head;
for (int i = 0; i < index; i++) {
temp = temp->next;
}
temp->data = newValue;
} else {
throw std::out_of_range("Index out of range");
}
}
// 删除元素
void remove(int index) {
if (index >= 0 && index < length() - 1) {
Node* temp = head;
for (int i = 0; i < index; i++) {
temp = temp->next;
}
temp->next = temp->next->next;
} else {
throw std::out_of_range("Index out of range");
}
}
~LinkedList() {
deleteNode(head);
}
private:
// 辅助函数,递归删除节点
void deleteNode(Node* node) {
if (node == nullptr) return;
deleteNode(node->next);
delete node;
}
};
int main() {
LinkedList list;
int choice;
while (true) {
std::cout << "1. Insert\n2. Get Length\n3. Get Element\n4. Set Element\n5. Remove Element\n6. Exit\n";
std::cin >> choice;
switch (choice) {
case 1:
int value;
std::cout << "Enter a value to insert: ";
std::cin >> value;
list.insert(value);
break;
case 2:
std::cout << "List length: " << list.length() << std::endl;
break;
case 3:
int index;
std::cout << "Enter an index: ";
std::cin >> index;
try {
std::cout << "Element at index " << index << ": " << list.get(index) << std::endl;
} catch (const std::out_of_range& e) {
std::cerr << e.what() << std::endl;
}
break;
case 4:
// 类似于get方法,这里省略
break;
case 5:
// 类似于get方法,这里省略
break;
case 6:
return 0;
default:
std::cerr << "Invalid choice! Please select again.\n";
}
}
return 0;
}
```
在这个示例中,用户可以选择添加元素、获取链表长度、读取/设置/删除指定索引的元素,直到退出程序。请注意,这个例子并没有处理所有可能的边界条件和异常情况,实际应用中需要完善错误处理。
阅读全文