单链表的增删查改c++
时间: 2023-12-06 08:28:14 浏览: 33
单链表的增删查改操作如下:
1. 增加节点:
- 头插法:将新节点插入链表头部,使新节点成为链表的第一个节点。
- 尾插法:将新节点插入链表尾部,使新节点成为链表的最后一个节点。
- 指定位置插入:将新节点插入到链表的指定位置。
2. 删除节点:
- 头删法:删除链表头部节点,使链表的第二个节点成为新的头节点。
- 尾删法:删除链表尾部节点,使倒数第二个节点成为新的尾节点。
- 指定位置删除:删除链表中指定位置的节点。
3. 查找节点:
- 根据值查找:遍历链表,找到第一个值与给定值相等的节点。
- 根据位置查找:遍历链表,找到指定位置的节点。
4. 修改节点:
- 根据值修改:遍历链表,找到第一个值与给定值相等的节点,并修改节点的值。
- 根据位置修改:遍历链表,找到指定位置的节点,并修改节点的值。
相关问题
c++ QSqlQuery增删查改
你可以使用 Qt 的 QSqlQuery 类来执行数据库的增删查改操作。下面是一些示例代码:
1. 插入数据:
```cpp
QSqlQuery query;
query.prepare("INSERT INTO table_name (column1, column2) VALUES (:value1, :value2)");
query.bindValue(":value1", value1);
query.bindValue(":value2", value2);
query.exec();
```
2. 删除数据:
```cpp
QSqlQuery query;
query.prepare("DELETE FROM table_name WHERE condition");
query.exec();
```
3. 查询数据:
```cpp
QSqlQuery query;
query.prepare("SELECT column1, column2 FROM table_name WHERE condition");
query.exec();
while (query.next()) {
QVariant value1 = query.value(0);
QVariant value2 = query.value(1);
// 处理查询结果
}
```
4. 更新数据:
```cpp
QSqlQuery query;
query.prepare("UPDATE table_name SET column1=:value1 WHERE condition");
query.bindValue(":value1", value1);
query.exec();
```
在上面的代码中,"table_name" 是你要操作的表的名称,"column1" 和 "column2" 是表中的列名,"condition" 是一些约束条件,用于指定要操作的数据行。
记得在使用 QSqlQuery 前,要先建立数据库连接,并且确保已经正确地配置了数据库驱动。
c++二叉查找树增删查改
以下是C++实现二叉搜索树的增删查改的示例代码:
1. 结点类的实现:
```c++
class Node {
public:
int val;
Node* left;
Node* right;
Node(int val) {
this->val = val;
this->left = nullptr;
this->right = nullptr;
}
};
```
2. 二叉搜索树类的实现:
```c++
class BST {
public:
Node* root;
BST() {
root = nullptr;
}
// 插入操作
void insert(int val) {
root = insertNode(root, val);
}
// 删除操作
void remove(int val) {
root = removeNode(root, val);
}
// 查找操作
bool search(int val) {
return searchNode(root, val);
}
// 修改操作
void modify(int oldVal, int newVal) {
remove(oldVal);
insert(newVal);
}
private:
// 插入结点
Node* insertNode(Node* node, int val) {
if (node == nullptr) {
return new Node(val);
}
if (val < node->val) {
node->left = insertNode(node->left, val);
} else if (val > node->val) {
node->right = insertNode(node->right, val);
}
return node;
}
// 删除结点
Node* removeNode(Node* node, int val) {
if (node == nullptr) {
return nullptr;
}
if (val < node->val) {
node->left = removeNode(node->left, val);
} else if (val > node->val) {
node->right = removeNode(node->right, val);
} else {
if (node->left == nullptr && node->right == nullptr) {
delete node;
node = nullptr;
} else if (node->left == nullptr) {
Node* temp = node;
node = node->right;
delete temp;
} else if (node->right == nullptr) {
Node* temp = node;
node = node->left;
delete temp;
} else {
Node* temp = findMin(node->right);
node->val = temp->val;
node->right = removeNode(node->right, temp->val);
}
}
return node;
}
// 查找结点
bool searchNode(Node* node, int val) {
if (node == nullptr) {
return false;
}
if (val == node->val) {
return true;
} else if (val < node->val) {
return searchNode(node->left, val);
} else {
return searchNode(node->right, val);
}
}
// 查找最小值
Node* findMin(Node* node) {
while (node->left != nullptr) {
node = node->left;
}
return node;
}
};
```