C++单链表操作:查询、插入、删除
C++单链表操作:查询、插入、删除
本文提供C++代码实现单链表的基本操作,包括查询指定元素、在指定位置插入元素和删除指定位置的元素。
代码实现
#include <iostream>
using namespace std;
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 定义链表类型
typedef struct {
Node* head;
int length;
} LinkList;
// 初始化链表
void InitList(LinkList& H) {
H.head = nullptr;
H.length = 0;
}
// 查询链表中是否存在指定元素
int Get_LinkList(LinkList H, int key) {
Node* p = H.head;
int index = 1;
while (p != nullptr) {
if (p->data == key) {
return index;
}
p = p->next;
index++;
}
return -1;
}
// 在链表的指定位置插入元素
bool ListInsert(LinkList& H, int i, int e) {
if (i < 1 || i > H.length + 1) {
return false;
}
Node* newNode = new Node;
newNode->data = e;
newNode->next = nullptr;
if (i == 1) {
newNode->next = H.head;
H.head = newNode;
} else {
Node* p = H.head;
for (int j = 1; j < i - 1; j++) {
p = p->next;
}
newNode->next = p->next;
p->next = newNode;
}
H.length++;
return true;
}
// 删除链表中指定位置的元素
bool ListDelete(LinkList& H, int i) {
if (i < 1 || i > H.length) {
return false;
}
Node* p = H.head;
if (i == 1) {
H.head = p->next;
} else {
Node* q;
for (int j = 1; j < i - 1; j++) {
p = p->next;
}
q = p->next;
p->next = q->next;
delete q;
}
H.length--;
return true;
}
// 打印链表
void PrintList(LinkList H) {
Node* p = H.head;
while (p != nullptr) {
cout << p->data << ' ';
p = p->next;
}
cout << endl;
}
int main() {
LinkList H;
InitList(H);
// 插入元素
ListInsert(H, 1, 10);
ListInsert(H, 2, 20);
ListInsert(H, 3, 30);
// 打印链表
PrintList(H);
// 查询元素
int index = Get_LinkList(H, 20);
if (index != -1) {
cout << "元素20在链表中的位置为:" << index << endl;
} else {
cout << "链表中不存在元素20" << endl;
}
// 删除元素
ListDelete(H, 2);
// 打印链表
PrintList(H);
return 0;
}
在上述代码中,ElemType被替换为int类型,可以根据实际需求进行更改。
代码说明
- 链表节点结构体
Node: 包含数据域data和指向下一个节点的指针next。 - 链表类型
LinkList: 包含头指针head和链表长度length。 - 初始化链表
InitList: 将头指针设为nullptr,链表长度设为0。 - 查询指定元素
Get_LinkList: 从头指针开始遍历链表,如果找到指定元素,返回其在链表中的位置,否则返回-1。 - 在指定位置插入元素
ListInsert: 如果插入位置无效,返回false;否则,创建一个新的节点,将数据存入节点,并将节点插入到指定位置。 - 删除指定位置的元素
ListDelete: 如果删除位置无效,返回false;否则,删除指定位置的节点。 - 打印链表
PrintList: 从头指针开始遍历链表,依次输出每个节点的数据。
总结
本文提供了一个C++实现单链表基本操作的示例代码,并对代码进行了详细说明。希望这能帮助读者更好地理解和学习单链表的基本操作。
原文地址: http://www.cveoy.top/t/topic/pb1Q 著作权归作者所有。请勿转载和采集!