编程实现线性表链式存储结构中的基本操作的实现(创建、插入、删除和查找),并设计一个主菜单完成各个功能的调用
时间: 2024-10-24 22:19:11 浏览: 55
dm03_线性表链式存储设计与实现.zip_数据结构(C语言)
在编程中,特别是使用链式存储结构如单向链表或双向链表实现线性表时,你可以按照以下步骤来设计基本操作:
1. **创建(初始化)**:
- 定义一个节点类,包含数据域和指针域(对于链表,通常是next指针指向下一个节点)。
```cpp
struct Node {
int data;
Node* next;
};
```
创建链表时,可以初始化一个头节点,通常设置为`nullptr`表示链表为空。
```cpp
Node* createList() {
return nullptr;
}
```
2. **插入**:
- 插入元素到链表头部:新节点成为头节点,旧头节点next指向下新节点。
- 插入元素到指定位置:遍历找到目标位置,然后更新节点连接。
```cpp
void insertAtBegin(Node*& head, int value) {
Node* newNode = new Node{value, head};
head = newNode;
}
// 插入元素到特定索引
void insertAtPosition(Node*& head, int index, int value) {
if (index <= 0) {
insertAtBegin(head, value);
} else {
Node* current = head;
for (int i = 0; i < index - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current == nullptr) {
std::cerr << "Invalid index" << std::endl;
} else {
newNode = new Node{value, current->next};
current->next = newNode;
}
}
}
```
3. **删除**:
- 删除头节点:直接修改头节点引用。
- 删除指定值:遍历链表寻找该值,并断开其前一个节点的连接。
```cpp
void deleteNode(Node*& head, int value) {
if (head != nullptr && head->data == value) {
Node* temp = head;
head = head->next;
delete temp;
} else {
Node* current = head;
while (current != nullptr && current->data != value) {
current = current->next;
}
if (current == nullptr) {
std::cout << "Value not found" << std::endl;
} else {
current->prev->next = current->next;
delete current;
}
}
}
```
4. **查找**:
- 查找特定值:遍历链表直到找到或到达末尾。
```cpp
Node* search(Node* head, int value) {
Node* current = head;
while (current != nullptr) {
if (current->data == value) {
break;
}
current = current->next;
}
return current;
}
```
5. **主菜单**:
设计一个简单的控制循环,让用户选择操作并调用相应的函数。
```cpp
void mainMenu(Node* &head) {
while (true) {
cout << "Choose an operation:\n"
<< "1. Insert\n"
<< "2. Delete\n"
<< "3. Search\n"
<< "4. Exit\n";
int choice;
cin >> choice;
switch (choice) {
case 1:
int value;
cout << "Enter the value to insert: ";
cin >> value;
insertAtBegin(head, value);
break;
case 2:
int delValue;
cout << "Enter the value to delete: ";
cin >> delValue;
deleteNode(head, delValue);
break;
case 3:
int searchValue;
cout << "Enter the value to search: ";
cin >> searchValue;
Node* result = search(head, searchValue);
if (result != nullptr) {
cout << "Found at position: " << nodeIndex(head, result) << endl;
} else {
cout << "Value not found" << endl;
}
break;
case 4:
cout << "Exiting program..." << endl;
exit(0);
default:
cout << "Invalid choice. Try again.\n";
}
}
}
```
记得在实际应用中添加错误处理和边界检查,以保证程序的健壮性。以上代码只是一个基础示例,实际实现可能会根据所选编程语言有所不同。
阅读全文