线性表基本操作在单链表上的实现(演示单链表的创建、插入、删除、查找、输出等操作),通过简单实例测试各基本操作函数算法的正确性。
时间: 2024-09-21 11:02:59 浏览: 38
线性表的链式表示与实现-单链表类型的定义及基本操作
线性表的基本操作在单链表上通常包括以下几个部分:
1. **创建(初始化)单链表**:首先,我们需要定义一个节点结构体,包含数据域和指针域,指向下一个节点。然后可以创建一个空链表,其头指针初始化为空。
```c++
struct ListNode {
int data;
ListNode* next;
};
ListNode* createList() {
return NULL; // 初始化一个空链表
}
```
2. **插入元素**:在指定位置插入新节点,例如插入到链表开头(头部插入)或指定索引处。
- 插入到头部:`void insertAtHead(ListNode*& head, int value) { ListNode* newNode = new ListNode{value, head}; head = newNode; }`
- 插入到指定位置:`void insertAtPosition(ListNode*& head, int value, int position) {
if (position == 0) {
insertAtHead(head, value);
} else {
ListNode* curr = head;
for (int i = 0; i < position - 1 && curr != NULL; ++i) {
curr = curr->next;
}
if (curr != NULL) {
ListNode* newNode = new ListNode{value};
newNode->next = curr->next;
curr->next = newNode;
}
}
}`
3. **删除元素**:移除某个节点,如删除特定值的第一个出现或指定索引处的节点。
- 删除第一个匹配项:`void deleteNode(ListNode*& head, int value) {
if (head != NULL && head->data == value) {
ListNode* temp = head;
head = head->next;
delete temp;
} else {
ListNode* curr = head;
while (curr != NULL && curr->data != value) {
curr = curr->next;
}
if (curr != NULL) {
curr->next = curr->next->next;
delete curr;
}
}
}`
4. **查找元素**:遍历链表直到找到目标值或遍历完为止。
```c++
bool search(ListNode* head, int value) {
ListNode* curr = head;
while (curr != NULL) {
if (curr->data == value) {
return true;
}
curr = curr->next;
}
return false;
}`
```
5. **输出链表**:从头节点开始打印所有节点的数据。
```c++
void printList(ListNode* head) {
ListNode* curr = head;
while (curr != NULL) {
cout << curr->data << " ";
curr = curr->next;
}
cout << endl;
}```
为了测试这些函数,你可以创建一个简单的链表,插入一些元素,然后分别尝试插入、删除、查找和打印操作,并检查结果是否符合预期。如果所有操作都能正常运行,那么算法就实现了正确的功能。
阅读全文