建立链表,指定位置插入删除,查询指定数据所在位置的代码源文件与头文件
时间: 2024-10-28 15:09:33 浏览: 15
数据结构实验报告4-数组与广义表-基于十字链表的稀疏矩阵转置-实验内容及要求.docx
在创建链表并支持在特定位置插入、删除元素以及查找元素位置的操作时,你需要编写一些基本的数据结构(如单链表节点`ListNode`),同时维护链表相关的函数(例如`insert_at`, `delete_at`, 和 `find_position`). 这里提供了一个简单的C++示例:
**链表节点定义 (Node.h)**
```cpp
#ifndef NODE_H
#define NODE_H
#include <iostream>
struct ListNode {
int data;
ListNode* next;
ListNode(int val = 0) : data(val), next(nullptr) {}
};
#endif // NODE_H
```
**链表操作库 (ListOperations.cpp)**
```cpp
#include "Node.h"
// 插入节点到链表的特定位置
void insert_at(ListNode*& head, int index, int value) {
if (index <= 0) {
ListNode* newNode = new ListNode(value);
newNode->next = head;
head = newNode;
return;
}
ListNode* current = head;
for (int i = 0; i < index - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current == nullptr) {
std::cout << "Invalid index\n";
return;
}
ListNode* newNode = new ListNode(value);
newNode->next = current->next;
current->next = newNode;
}
// 删除链表中指定位置的节点
void delete_at(ListNode*& head, int index) {
if (index <= 0) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* current = head;
for (int i = 0; i < index - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current == nullptr || current->next == nullptr) {
std::cout << "Invalid index or node not found\n";
return;
}
ListNode* toDelete = current->next;
current->next = toDelete->next;
delete toDelete;
}
// 查找给定值在链表中的位置(从0开始计数)
int find_position(const ListNode* head, int target) {
ListNode* current = head;
int position = 0;
while (current != nullptr && current->data != target) {
current = current->next;
position++;
}
return current ? position : -1; // 返回目标值存在的位置,若未找到返回-1
}
```
**主程序 (main.cpp)**
```cpp
#include "Node.h"
#include "ListOperations.cpp"
int main() {
// 创建链表,插入节点,删除节点,查找位置等操作...
ListNode* head = nullptr;
// ... 实现具体的链表操作 ...
return 0;
}
```
记得将上述代码保存到单独的`.cpp`文件(比如`ListOperations.cpp`)和对应的`.h`头文件中,然后在`main.cpp`或其他需要链表功能的模块中包含它们。
阅读全文