当前位置: 首页 > news >正文

基础数据结构---栈

顺序表实现

一、栈类的声明

栈是一种特殊的线性表,可以由顺序表来实现,也可以由链表来实现,这节课,我们采用顺序表来实现栈。

#include <iostream>#include <stdexcept>using namespace std;template<typename T> // (1)class Stack { // (2)private:T *data; // (3)int size; // (4)int capacity; // (5)void resize(); // (6)public:Stack() : data(new T[10]), size(0), capacity(10) {} // (7)~Stack(); // (8)void push(T element); // (9)T pop(); // (10)T top() const; // (11)int getSize() const; // (12)};

(1) template<typename T> 这是一个模板声明,表明 Stack 类是一个通用的模板类,可以用于存储任何类型的元素 T。

(2) 这是 Stack 类的声明,它表示一个栈的数据结构。

(3) data 是一个私有成员变量,用于存储栈中的元素。它是一个指向类型为 T 的指针。

(4) size 是一个私有成员变量,用于记录栈中元素的数量。

(5) capacity 这是一个私有成员变量,用于记录栈的容量。

(6) resize() 是一个私有成员函数,用于在栈容量不足时进行扩容。

(7) Stack() 是构造函数,用于初始化栈的成员变量。它创建一个新的栈,并分配一个容量为 10 的数组来存储元素。

(8) ~Stack() 是析构函数,用于释放栈所占用的内存。

(9) void push(T element) 这是一个公共成员函数,用于将一个新元素压入栈顶。

(10) T pop() 是一个公共成员函数,用于从栈顶弹出一个元素。

(11) T top() 是一个公共成员函数,用于获取栈顶的元素,但不弹出它。

(12) int getSize() 是一个公共成员函数,用于获取栈中元素的数量。

二、栈的扩容

template<typename T>void Stack<T>::resize() { // (1)int newCapacity = capacity * 2; // (2)T *newData = new T[newCapacity]; // (3)for (int i = 0; i < size; i++) {newData[i] = data[i]; // (4)}delete[] data; // (5)data = newData; // (6)capacity = newCapacity; // (7)}

resize 函数用于在栈的容量不足时进行扩容操作。它创建了一个新的更大的数组,并将旧数组的元素复制到新数组中,然后更新栈的指针和容量。这样可以确保栈能够容纳更多的元素,而不会发生溢出。

(1) template<typename T> 是模板声明的一部分,表示 resize 函数是一个通用的模板函数,可以用于处理任何类型的元素 T。

(2) 这一行计算了新的容量,并将其赋值给 newCapacity 变量。新的容量是当前容量的两倍。

(3) 创建一个新的数组 newData,用于存储新扩容后的元素。新数组的大小为新的容量。

(4) 这是一个循环,用于将当前栈中的元素从旧数组 data 复制到新数组 newData 中。

(5) 释放了旧数组 data 所占用的内存空间。

(6) 将 newData 数组赋值给 data,使其成为栈的新存储数组。

(7) 更新了栈的容量为新的容量。

三、栈的销毁

template<typename T>Stack<T>::~Stack() { // (1)delete[] data; // (2)}

(1) 这是析构函数的声明,用于在对象销毁时执行清理操作。

(2) 释放了动态分配的数组 data 所占用的内存空间。delete[] 用于释放动态分配的数组内存。

四、入栈

template<typename T>void Stack<T>::push(T element) {if (size == capacity) { // (1)resize();}data[size++] = element; // (2)}

(1) 如果栈的当前大小 size 等于容量 capacity,则调用 resize 函数进行扩容操作。代表如果栈已满,需要先进行扩容以增加栈的容量。

(2) 将元素 element 赋值给栈数组 data 的 size 位置,并将 size 的值增加 1,以表示栈中元素的数量增加。

五、出栈

template<typename T>T Stack<T>::pop() {if (size == 0) {throw std::underflow_error("Stack is empty"); // (1)}return data[--size]; // (2)}

(1) 检查栈是否为空。如果栈为空(即 size 为 0),则抛出一个 std::underflow_error 异常,提示 "Stack is empty"。

(2) 如果栈不为空,通过 --size 减小栈的大小,并返回 data 数组中栈顶元素的值。

六、获取栈顶元素

template<typename T>T Stack<T>::top() const {if (size == 0) {throw std::underflow_error("Stack is empty");}return data[size - 1]; // (1)}

(1) 如果栈不为空,返回 data 数组中最后一个元素的值,即栈顶元素。

七、栈的完整源码

#include <iostream>
#include <stdexcept>using namespace std;template<typename T>
class Stack {
private:T* data;int size;int capacity;void resize();
public:Stack() : data(new T[10]), size(0), capacity(10) {}~Stack();void push(T element);T pop();T top() const;int getSize() const;
};template<typename T>
void Stack<T>::resize() {int newCapacity = capacity * 2;T* newData = new T[newCapacity];for (int i = 0; i < size; i++) {newData[i] = data[i];}delete[] data;data = newData;capacity = newCapacity;
}template<typename T>Stack<T>::~Stack() {delete[] data;
}template<typename T>void Stack<T>::push(T element) {if (size == capacity) {resize();}data[size++] = element;
}template<typename T>T Stack<T>::pop() {if (size == 0) {throw std::underflow_error("Stack is empty");}return data[--size];
}template<typename T>
T Stack<T>::top() const {if (size == 0) {throw std::underflow_error("Stack is empty");}return data[size - 1];
}template<typename T>
int Stack<T>::getSize() const {return size;
}int main() {Stack<int> st;st.push(4);st.push(7);st.push(13);cout << st.top() << endl;st.push(17);cout << st.top() << endl;st.pop();st.pop();cout << st.top() << endl;cout << st.getSize() << endl;return 0;}

C++链表实现

一、栈类的声明

栈是一种特殊的线性表,可以由顺序表来实现,也可以由链表来实现,这节课,我们采用链表来实现栈。

#include <iostream>
#include <stdexcept>using namespace std;
template<typename T> // (1)class Stack {
private:struct Node { // (2)T data;Node* next;Node(T d) : data(d), next(NULL) {}};Node* head; // (3)int size; // (4)
public:Stack() : head(NULL), size(0) {} // (5)~Stack(); // (6)void push(T element); // (7)T pop(); // (8)T top() const; // (9)int getSize() const; // (10)};

(1) 这是一个模板声明,表示这个类是一个通用的类模板,可以用于处理各种不同类型的元素。

(2)这是一个结构体定义,用于表示栈中的节点。每个节点包含一个数据成员 data 和一个指向下一个节点的指针 next。

(3) head 是一个私有成员变量,用于保存栈的头节点指针。

(4) size 是一个私有成员变量,用于保存栈的大小。

(5) Stack() 是构造函数,用于初始化栈。它将头节点指针设置为 NULL,并将栈的大小设置为 0。

(6) ~Stack() 是析构函数,用于释放栈中分配的内存。

(7) void push(T element) 是一个公共成员函数,用于将一个元素压入栈顶。它创建一个新的节点,并将元素赋值给节点的数据成员,然后将新节点插入到栈的头部。

(8) T pop() 是一个公共成员函数,用于从栈顶弹出一个元素。它检查栈是否为空,如果不为空,则删除栈顶节点,并返回节点的数据成员。

(9) T top() const 是一个公共成员函数,用于获取栈顶元素,但不弹出它。它检查栈是否为空,如果不为空,则返回栈顶节点的数据成员。

(10) int getSize() const 是一个公共成员函数,用于获取栈的大小。

二、栈的扩容

由链表实现栈时,每次如果是新生成的结点,则不涉及到像顺序表那样的扩容操作。

三、栈的销毁

template<typename T>Stack<T>::~Stack() { // (1)while (head != NULL) { // (2)Node* temp = head;head = head->next;delete temp;}
}

(1) 这是 Stack 类的析构函数的实现代码。它的作用是在对象销毁时,释放动态分配的节点内存。

(2) 不断循环访问栈中的元素,每次取出栈顶元素,存储到临时变量 temp 中,并且弹出栈顶,并且利用 delete 将弹出的元素进行内存释放,直到栈为空为止。

四、入栈

template<typename T>
void Stack<T>::push(T element) {Node* newNode = new Node(element); // (1)newNode->next = head; // (2)head = newNode; // (3)++size; // (4)
}

(1) 创建了一个新的 Node 对象,并将传入的元素赋值给该对象的数据成员。通过使用 new 操作符动态分配了内存来存储新的节点。

(2) 将新节点的 next 指针指向当前的头节点。这样,新节点就被添加到了栈的头部。

(3) 将头节点的指针更新为新节点,使新节点成为栈的新头部。

(4) 将栈的大小计数器加 1,以反映栈中元素数量的增加。

五、出栈

template<typename T>T Stack<T>::pop() {if (head == NULL) {throw std::underflow_error("Stack is empty"); // (1)}T result = head->data; // (2)Node* temp = head; // (3)head = head->next; // (4)delete temp; // (5)--size; // (6)return result; // (7)
}

(1) 如果头节点为空(即栈为空),则抛出一个 std::underflow_error 异常,提示 "Stack is empty"。

(2) 将头节点的数据成员赋值给 result 变量,准备返回弹出的元素。

(3) 将头节点的指针赋值给 temp 变量,用于后续删除头节点。

(4) 将头节点的 next 指针赋值给头节点本身,从而将头节点从链表中移除。

(5) 调用 delete 操作符释放 temp 所指向的节点内存。

(6) 将栈的大小计数器减 1,以反映弹出操作后栈中元素数量的减少。

(7) 返回弹出的元素,通过 result 变量传递返回值。

六、获取栈顶元素

template<typename T>T Stack<T>::top() const {if (head == NULL) {throw std::underflow_error("Stack is empty"); // (1)}return head->data; // (2)
}

(1) 如果栈为空,那么获取栈顶的这个操作是不合法的,抛出异常。

(2) 如果栈不为空,head 指针的 data 域,即栈顶元素。

七、栈的完整源码

#include <iostream>
#include <stdexcept>using namespace std;template<typename T>class Stack {
private:struct Node {T data;Node* next;Node(T d) : data(d), next(NULL) {}};Node* head;int size;
public:Stack() : head(NULL), size(0) {}~Stack();void push(T element);T pop();T top() const;int getSize() const;
};template<typename T>Stack<T>::~Stack() {while (head != NULL) {Node* temp = head;head = head->next;delete temp;}
}template<typename T>void Stack<T>::push(T element) {Node* newNode = new Node(element);newNode->next = head;head = newNode;++size;
}template<typename T>T Stack<T>::pop() {if (head == NULL) {throw std::underflow_error("Stack is empty");}T result = head->data;Node* temp = head;head = head->next;delete temp;--size;return result;
}template<typename T>T Stack<T>::top() const {if (head == NULL) {throw std::underflow_error("Stack is empty");}return head->data;
}template<typename T>int Stack<T>::getSize() const {return size;
}int main() {Stack<int> st;st.push(4);st.push(7);st.push(13);cout << st.top() << endl;st.push(17);cout << st.top() << endl;st.pop();st.pop();cout << st.top() << endl;cout << st.getSize() << endl;return 0;}

题集

1. 进制转换

2. Bitset

#include <iostream>
#include <bitset>
using namespace std;int main() {int n;// 循环读取输入直到文件结束while (cin >> n) {// 使用 bitset 将整数转换为二进制字符串// 因为 0 < n < 1000, 所以我们最多需要 10 位来表示 n 的二进制形式 (2^10 = 1024 > 1000)cout << bitset<10>(n).to_string().substr(10 - (int)log2(n) - 1) << endl;}return 0;
}

这段代码中,我们使用了bitset库,它可以方便地将整数转换为固定长度的二进制字符串。由于题目中指出0 < n < 1000,我们知道最大值999的二进制表示是1111100111,这需要10个二进制位来表示。所以我们创建了一个大小为10的bitset。

然而,当使用bitset<10>(n).to_string()时,它总是返回一个长度为10的字符串,即使对于较小的数字也是如此,比如1会被表示为0000000001。为了去除前导零,我们计算了数字n在二进制下的实际位数(即log2(n)+1),然后从结果字符串中切片得到正确的二进制表示。

需要注意的是,对于n=1的情况,log2(n)会给出0,所以我们对log2(n)的结果进行了类型转换并加1,确保我们不会尝试访问无效的索引。对于n=0的情况,题目已经说明不会出现,因此无需特别处理。

另外,如果想要更简单的实现,可以忽略bitset和log2,而使用循环方式构建二进制字符串,或者使用标准库中的std::stoi与std::string结合自定义逻辑去除前导零。

3. 图书整理 I

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:vector<int> reverseBookList(ListNode* head) {stack<int> stk;while (head) {stk.push(head->val);head = head->next; }vector<int> ans;while (!stk.empty()) {ans.push_back(stk.top());stk.pop();}return ans;}
};

4. 回文链表

class Solution {
public:bool isPalindrome(ListNode* head) {stack<int> stk;ListNode *temp = head; // 使用临时指针来遍历链表// 将所有节点值压入栈中while (temp) {stk.push(temp->val);temp = temp->next;}// 重置指针到链表头部,开始比较temp = head;while (temp) {if (stk.top() != temp->val) return false; // 如果栈顶元素和当前节点值不同,则不是回文stk.pop();temp = temp->next;}return true; // 所有节点值匹配,链表是回文}
};

暂时看看就好

使用双指针方法检查链表是否为回文,可以在O(n)时间复杂度和O(1)空间复杂度下完成。这种方法不需要额外的数据结构来存储节点值。以下是具体步骤:

1. **找到链表的中间节点**:使用快慢指针(Floyd's Cycle Detection Algorithm),慢指针每次移动一步,而快指针每次移动两步。当快指针到达链表末尾时,慢指针将位于链表的中间位置。

2. **反转链表的后半部分**:从中间节点开始,反转链表的后半部分。

3. **比较前后两部分**:将链表分为两部分,前半部分和反转后的后半部分,逐个比较两个部分对应的节点值是否相等。如果所有对应节点的值都相等,则链表是回文;否则不是。

4. **恢复链表(可选)**:如果需要保持链表的原始状态,可以再次反转链表的后半部分以恢复原状。

5. **返回结果**:根据比较的结果返回链表是否为回文。

下面是使用双指针方法实现的代码:

class Solution {
public:bool isPalindrome(ListNode* head) {if (!head || !head->next) return true;// Step 1: Find the middle of the linked list using slow and fast pointersListNode *slow = head, *fast = head;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;}// Step 2: Reverse the second half of the list starting from slowListNode *prev = nullptr, *curr = slow, *nextTemp;while (curr) {nextTemp = curr->next;curr->next = prev;prev = curr;curr = nextTemp;}// Step 3: Compare the first half and reversed second halfListNode *firstHalf = head, *secondHalf = prev;while (secondHalf) { // secondHalf will be shorter or equal in length to firstHalfif (firstHalf->val != secondHalf->val) return false;firstHalf = firstHalf->next;secondHalf = secondHalf->next;}// Step 4: Restore the list (optional)curr = prev; // prev now points to the new head of the reversed second halfprev = nullptr;while (curr) {nextTemp = curr->next;curr->next = prev;prev = curr;curr = nextTemp;}return true;}
};

这段代码实现了上述的每个步骤,并且在最后可以选择性地恢复链表的原始顺序。通过这种方式,我们既能够有效地检查链表是否为回文,又能够在检查结束后保持链表的初始状态。

5. 括号的最大嵌套深度

class Solution {
public:int maxDepth(const std::string& inputString) {int stringLength = inputString.length(), maximumDepth = 0;for (int index = 0, currentDepth = 0; index < stringLength; index++) {if (inputString[index] == '(') currentDepth++;else if (inputString[index] == ')') currentDepth--;maximumDepth = std::max(maximumDepth, currentDepth);}return maximumDepth;}
};

6. 有效的括号

普通栈

剑指 Offer 06. 从尾到头打印链表

反转链表

括号的最大嵌套深度

有效的括号

最长有效括号

剑指 Offer II 027. 回文链表

回文链表

回文链表

棒球比赛

剑指 Offer II 036. 后缀表达式

比较含退格的字符

三合一

验证栈序列

剑指 Offer 31. 栈的压入、弹出序列

从先序遍历还原二叉树

单调栈

最小栈

栈的最小值

剑指 Offer 30. 包含min函数的栈

剑指 Offer II 038. 每日温度

用栈实现队列

剑指 Offer 09. 用两个栈实现队列

化栈为队

最后 K 个数的乘积

去除重复字母

不同字符的最小子序列

柱状图中最大的矩形

剑指 Offer II 039. 直方图最大矩形面积

最大矩形

剑指 Offer II 040. 矩阵中最大的矩形

接雨水

直方图的水量

最大子矩阵

相关文章:

基础数据结构---栈

顺序表实现 一、栈类的声明 栈是一种特殊的线性表&#xff0c;可以由顺序表来实现&#xff0c;也可以由链表来实现&#xff0c;这节课&#xff0c;我们采用顺序表来实现栈。 #include <iostream>#include <stdexcept>using namespace std;template<typename …...

Redis 最佳实践

这是以前写下来的文章&#xff0c;发出来备份一下 Redis 在企业中的最佳实践可以帮助提高性能、可用性和数据管理效率。以下是一些推荐的做法&#xff1a; 选择合适的数据结构&#xff1a; 根据需求选择适当的 Redis 数据结构&#xff08;如 Strings、Lists、Sets、Hashes、So…...

前端零基础学习Day-Eight

CSS字体和文本样式 CSS文字样式 字体&#xff1a;font-family 语法&#xff1a;font-family:[字体1][,字体2][,…] p{font-family:“微软雅黑”,“宋体”,“黑体”;} 含空格字体名和中文&#xff0c;用英文引号括起 属性值&#xff1a;具体字体名&#xff0c;字体集 字体集&…...

在Vue3中实现文件上传功能,结合后端API

随着现代Web应用程序的不断发展&#xff0c;文件上传成为了用户交互中不可或缺的一部分。在本篇博客中&#xff0c;我们将深入讨论如何在Vue3中实现一个文件上传功能&#xff0c;并与后端API进行交互。我们将使用Vue3的Composition API&#xff08;setup语法糖&#xff09;来构…...

智慧商城:点击“加入购物车”判断是否登录来进行跳转到登录页登录并回跳 + 发请求渲染加入购物车数量的角标

点击“加入购物车”判断是否登录来进行跳转到登录页登录并回跳 按需引入需要的 Dialog 组件并进行全局注册 Vue.use( )仅仅在Vue组件的上下文中起作用&#xff0c;所以在Vue组件中通过 this.$ 来使用 在 js 文件中则还要导入&#xff0c;然后直接使用&#xff0c;并不需要 this…...

植物大战僵尸杂交版v3.0.2最新版本(附下载链接)

B站游戏作者潜艇伟伟迷于12月21日更新了植物大战僵尸杂交版3.0.2版本&#xff01;&#xff01;&#xff01;&#xff0c;有b站账户的记得要给作者三连关注一下呀&#xff01; 不多废话下载链接放上&#xff1a; 夸克网盘链接&#xff1a;&#xff1a;https://pan.quark.cn/s/5c…...

后端统一接口返回状态【初步模板】

后端统一接口返回状态【模板】 文章目录 后端统一接口返回状态【模板】1 .Result类编写2 .Constants类编写3 .更改Controller层下的类return格式 开发过程中&#xff0c;每个接口的返回格式设计都是一样的&#xff0c;这样可以大大提高开发效率。 项目结构如下图&#xff1a;分…...

QML Text组件

文章目录 前言主体基本文本显示字体和样式富文本支持长文本的处理文本样式与效果超链接Label 元素总结 前言 在 QML 中&#xff0c;Text 和 Label 是常用的文本显示元素&#xff0c;它们在显示文本方面具有相似性&#xff0c;但在功能和定制性上也存在一些差异。Text 元素用于…...

cv2.addWeighted用法详解

cv2.addWeighted 是 OpenCV 中用于图像加权叠加的函数&#xff0c;常用于将两张图像按一定比例融合在一起。它通过对两张图像的像素进行加权和求和的操作&#xff0c;可以实现透明度调整、图像混合、图像融合等效果。 函数定义 cv2.addWeighted(src1, alpha, src2, beta, gam…...

基于微信小程序的消防隐患在线举报系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…...

牛客网 SQL36查找后排序

SQL36查找后排序 select device_id,age from user_profile order by age asc #select [字段1,字段2] from [表名] order by [字段1] [升序(asc)/降序(desc)],[字段2] [升序(asc)/降序(desc)] #select&#xff1a;查询 #order by 排序 每日问题 如何实现对象的克隆&#xff1…...

Dart 中的构造函数

在 Dart 中&#xff0c;类的构造函数用于初始化类的对象。当你创建一个类的实例时&#xff0c;构造函数被自动调用。Dart 支持多种构造函数的写法&#xff0c;包括常规构造函数、命名构造函数、工厂构造函数等。 一、传统构造函数 默认构造函数是没有名字的构造函数&#xff…...

实现 WebSocket 接入文心一言

目录 什么是 WebSocket&#xff1f; 为什么需要 WebSocket&#xff1f; HTTP 的局限性 WebSocket 的优势 总结&#xff1a;HTTP 和 WebSocket 的区别 WebSocket 的劣势 WebSocket 常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 WebSocket 心跳机制 …...

GO--堆(have TODO)

堆 堆&#xff08;Heap&#xff09;是一种特殊的数据结构。它是一棵完全二叉树&#xff08;完全二叉树是指除了最后一层外&#xff0c;每一层上的节点数都是满的&#xff0c;并且最后一层的节点都集中在左边&#xff09;&#xff0c;结放在数组&#xff08;切片&#xff09;中…...

【Python随笔】Enigma密码机的原理及python代码实现

最近笔者接触到了Cypher这款游戏&#xff0c;玩法很简单&#xff0c;就是通过文字、图片等各种表达手段组成的谜面&#xff0c;猜一段英文&#xff0c;算是初步接触了密码学的一些知识。游戏中提到了很多类型的密码&#xff0c;其中Enigma密码机就是单独一种&#xff0c;在电影…...

二叉树 -- 堆(详解)

目录 1、堆的概念及结构 2、堆的实现(附代码) 2.1、向下调整算法建堆 3、堆的应用(附代码) 3.1、堆排序 3.2、TOP-K问题 1、堆的概念及结构 如果有一个关键码的集合K { k0&#xff0c;k1 &#xff0c;k2 &#xff0c;…&#xff0c;k(n-1) }&#xff0c;把它的所有元素…...

gradle项目下载依赖报错

报错信息 Cannot resolve external dependency org.projectlombok:lombok:1.18.36 because no repositories are defined. Required by:project :Possible solution:- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/…...

WPS怎么都无法删除空白页_插入空白页一次插入两张?_插入横屏空白页_横屏摆放图片_这样解决_显示隐藏段落标记---WPS工作笔记001

在wps使用的过程中你们有没有碰到过这种问题,就是,我贴图,因为图片太大,我需要把图片,横屏显示,这个时候我需要插入一个空白页,那么,在空白菜单下,点击,有时候会点击插入空白页,会一下子自动插入两张空白页.而且,怎么删除都删除不掉. 都快疯掉了. 网上搜索也没有找到好的方法,后…...

flask before_request 请求拦截器返回无值则放行,有值则拦截

环境 Python 3.11.5 Flask 2.2.2完整代码如下&#xff1a; from flask import Flask, make_response, Blueprintapp Flask(__name__) user_blue Blueprint(user, __name__, url_prefix/api/user) user_blue.before_request def befor…...

前端XMLHttpRequest get请求能不能在body中传参数?

文档 查看mdn文档&#xff0c;文档XMLHttpRequest.send()有提到&#xff1a; XMLHttpRequest.send() 方法接受一个可选的参数&#xff0c;其作为请求主体&#xff1b;如果请求方法是 GET 或者 HEAD&#xff0c;则应将请求主体设置为 null。 测试 一个简单的nodejs服务器 var…...

C语言的函数指针

介绍案例 什么是函数指针&#xff1f; 函数指针 是指向函数的指针变量&#xff0c;它可以用来间接调用函数。在 C/C 中&#xff0c;函数指针允许程序在运行时选择调用不同的函数&#xff0c;这使得代码更加灵活和动态。函数指针广泛应用于回调函数、事件处理、动态选择算法等…...

网络安全的学习方向和路线是怎么样的?

石器时代 第一个阶段——石器时代&#xff0c;针对的是纯新手小白刚刚入场。在这个阶段&#xff0c;主要是打基础&#xff0c;需要学习的有五部分内容&#xff1a; Windows Windows上基础的一些命令、PowerShell的使用和简单脚本编写&#xff0c;以及Windows以后经常会打交道…...

酒蒙子骰子小程序系统

酒蒙子流量变现小程序小游戏 后端tp8 前端uniapp 会员变现 分销推广 流量主 …...

html+css网页设计 美食 餐饮杰12个页面

htmlcss网页设计 美食 餐饮杰12个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff…...

【济大期末数据库】SQL语法速成

目录 SQL分类 DDL 概念 语法 操作数据库&#xff1a; 1.查询所有数据库 2.查询当前数据库 3.创建数据库 4.删除数据库 5.切换数据库 操作数据库内的表&#xff1a; 1.查询当前数据库所有表 2.查看指定表结构 3.创建表 DML 概念 语法 增&#xff08;INSERT&am…...

WeakAuras NES Script(lua)

WeakAuras NES Script 修星脚本字符串 脚本1&#xff1a;NES !WA:2!TMZFWXX1zDxVAs4siiRKiBN4eV(sTRKZ5Z6opYbhQQSoPtsxr(K8ENSJtS50(J3D7wV3UBF7E6hgmKOXdjKsgAvZFaPTtte0mD60XdCmmecDMKruyykDcplAZiGPfWtSsag6myGuOuq89EVDV9wPvKeGBM7U99EFVVVV33VFFB8Z2TJ8azYMlZj7Ur3QDR(…...

国内网络在Ubuntu 22.04中在线安装Ollama并配置Open-WebuiDify

配置docker科技网络 登录后复制 创建或编辑 Docker 配置文件 让docker使用代理&#xff1a; sudo mkdir /etc/systemd/system/docker.service.d -p sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf 文件&#xff0c;并添加以下内容&#xff1a; [Service] En…...

SQL 插入数据详解

本文介绍如何利用 SQL 的 INSERT 语句将数据插入表中。 1. 数据插入 顾名思义&#xff0c;INSERT 用来将行插入&#xff08;或添加&#xff09;到数据库表。插入有几种方式&#xff1a; 插入完整的行&#xff1b;插入行的一部分&#xff1b;插入某些查询的结果。 下面逐一介…...

中小学教室多媒体电脑安全登录解决方案

中小学教室多媒体电脑面临学生随意登录的问题&#xff0c;主要涉及到设备使用、网络安全、教学秩序等多个方面。以下是对这一问题的详细分析&#xff1a; 一、设备使用问题 1. 设备损坏风险 学生随意登录可能导致多媒体电脑设备过度使用&#xff0c;增加设备损坏的风险。不当…...

Element@2.15.14-tree checkStrictly 状态实现父项联动子项,实现节点自定义编辑、新增、删除功能

背景&#xff1a;现在有一个新需求&#xff0c;需要借助树结构来实现词库的分类管理&#xff0c;树的节点是不同的分类&#xff0c;不同的分类可以有自己的词库&#xff0c;所以父子节点是互不影响的&#xff1b;同样为了选择的方便性&#xff0c;提出了新需求&#xff0c;选择…...

Pycharm和Jupyter Notebook的比较【笔记】

1、Pycharm 特点&#xff1a; &#xff08;1&#xff09;集成开发环境&#xff08;IDE&#xff09;&#xff1a;提供了丰富的功能&#xff0c;如代码自动补全、错误检查、调试工具等。 &#xff08;2&#xff09;项目管理&#xff1a;支持大型项目的管理和组织&#xff0c;适合…...

MongoDB(下)

MongoDB 索引 MongoDB 索引有什么用? 和关系型数据库类似&#xff0c;MongoDB 中也有索引。索引的目的主要是用来提高查询效率&#xff0c;如果没有索引的话&#xff0c;MongoDB 必须执行 集合扫描 &#xff0c;即扫描集合中的每个文档&#xff0c;以选择与查询语句匹配的文…...

AI Agent与MEME:技术与文化融合驱动Web3创新

AI Agent如何引领Web3新时代&#xff1f; 随着Web3与区块链技术的迅速发展&#xff0c;AI Agent作为人工智能与区块链的交汇点&#xff0c;正在逐步成为推动去中心化生态的重要力量。同时&#xff0c;MEME文化凭借其强大的社区驱动力和文化渗透力&#xff0c;在链上生态中扮演着…...

前端如何将pdf等文件传入后端

我们知道在js中我们可以通过&#xff1a; <input type"file" name"file" id"fileInput" accept"image/*">来输入文件。其中type指后端url&#xff0c;accept来限制传入类型。 前端通过表单形式将其传入后端 那么前端是怎么将…...

山景BP1048蓝牙音频任务后台运行设置方法

1、 问题 山景BP1048提供的蓝牙音箱SDK蓝牙音频是不能在后台运行的。例如&#xff1a;现在进入U盘模式播放蓝牙音乐&#xff0c;那么此时蓝牙就会关闭。 但是在特定场景下&#xff0c;需要蓝牙保持连接。 2、解决办法 打开sys_param.c文件 #include <string.h> #incl…...

【服务器】服务器进程运行不受本地终端影响的方法总结

服务器进程运行不受本地终端影响的方法总结 1. 使用 nohup2. 使用 setsid3. 将命令放入后台 (&)总结参考 为了确保在集群或服务器上运行的长时间作业不受本地计算机网络中断或用户注销的影响&#xff0c;可以使用以下三种方法&#xff1a;nohup、setsid 和将命令放入后台 (…...

[数据结构] 链表

目录 1.链表的基本概念 2.链表的实现 -- 节点的构造和链接 节点如何构造? 如何将链表关联起来? 3.链表的方法(功能) 1).display() -- 链表的遍历 2).size() -- 求链表的长度 3).addFirst(int val) -- 头插法 4).addLast(int val) -- 尾插法 5).addIndex -- 在任意位置…...

WPF DataTemplate 数据模板

DataTemplate 顾名思义&#xff0c;数据模板&#xff0c;在 wpf 中使用非常频繁。 它一般用在带有 DataTemplate 依赖属性的控件中&#xff0c;如 ContentControl、集合控件 ListBox、ItemsControl 、TabControls 等。 1. 非集合控件中使用 <UserControl.Resources>&l…...

本地计算机上的MySQL服务启动后停止(connection refused: connect)解决一系列数据库连接不上的问题

推荐其他可能可以解决的博客&#xff1a; 【完美解决】mysql启动不了:本地计算机上的MySQL服务启动后停止-CSDN博客 1. 查看自己的mysql服务是否启动了&#xff0c;如果启动后又关闭了就使用下面这种方法 我是使用重新安装 MySQL 服务解决的 如果服务依然启动失败&#xf…...

前端使用 Konva 实现可视化设计器(20)- 性能优化、UI 美化

这一章主要分享一下使用 Konva 遇到的性能优化问题&#xff0c;并且介绍一下 UI 美化的思路。 至少有 2 位小伙伴积极反馈&#xff0c;发现本示例有明显的性能问题&#xff0c;一是内存溢出问题&#xff0c;二是卡顿的问题&#xff0c;在这里感谢大家的提醒。 请大家动动小手&a…...

ECharts平行坐标系-营养结构(平行坐标)-3,附视频讲解与代码下载

引言&#xff1a; 平行坐标系&#xff08;Parallel Coordinates&#xff09;是可视化高维几何和分析多元数据的常用方法。它通过在n维空间中显示一组点&#xff0c;绘制由n条平行线组成的背景&#xff08;通常是垂直且等距的&#xff09;&#xff0c;并将描述不同变量的各点连…...

蓝桥杯刷题——day8

蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 Di个单位时间&#xff0c;即它最早可以于 Ti时刻开始降落&am…...

WPF ControlTemplate 控件模板

区别于 DataTemplate 数据模板&#xff0c;ControlTemplate 是控件模板&#xff0c;是为自定义控件的 Template 属性服务的&#xff0c;Template 属性类型就是 ControlTemplate。 演示&#xff0c; 自定义一个控件 MyControl&#xff0c;包含一个字符串类型的依赖属性。 pub…...

【Git 常用操作:pull push】

Git 基本概念 Git 是一个先进的开源的分布式版本控制系统&#xff0c;常用于管理工作内容、项目代码等功能。 Git 工作流程 图片来源&#xff1a;https://www.runoob.com/git/git-basic-operations.html 说明&#xff1a; workspace&#xff1a;工作区staging area&#xff…...

初学stm32 --- 系统时钟配置

众所周知&#xff0c;时钟系统是 CPU 的脉搏&#xff0c;就像人的心跳一样。所以时钟系统的重要性就不言而喻了。 STM32 的时钟系统比较复杂&#xff0c;不像简单的 51 单片机一个系统时钟就可以解决一切。于是有人要问&#xff0c;采用一个系统时钟不是很简单吗&#xff1f;为…...

基于SpringBoot的图书管理系统(源码+数据库+报告)

一、项目介绍 358基于SpringBoot的图书管理系统&#xff0c;系统包含两种角色&#xff1a;管理员、用户,系统分为前台和后台两大模块 二、项目技术 编程语言&#xff1a;Java 数据库&#xff1a;MySQL 项目管理工具&#xff1a;Maven 前端技术&#xff1a;Vue 后端技术&#x…...

物理信息神经网络(PINN)八课时教案

物理信息神经网络&#xff08;PINN&#xff09;八课时教案 第一课&#xff1a;物理信息神经网络概述 1.1 PINN的定义与背景 物理信息神经网络&#xff08;Physics-Informed Neural Networks&#xff0c;简称PINN&#xff09;是一种将物理定律融入神经网络训练过程中的先进方…...

APM32F411使用IIS外设驱动es8388实现自录自播

前言&#xff1a; 从零开始学习I2s外设&#xff0c;配置Es8288寄存器实现录音播放。本文章使用主控芯片是APM32F411系类。音频相关的概念比较多&#xff0c;就不再次做过多的介绍&#xff0c;本文章只是简单实现边录边播功能。APM系类兼容st的芯片&#xff0c;所以用st的hal库来…...

flink SQL实现mysql source sink

接上文&#xff1a;一文说清flink从编码到部署上线 环境说明&#xff1a;MySQL&#xff1a;5.7&#xff1b;flink&#xff1a;1.14.0&#xff1b;hadoop&#xff1a;3.0.0&#xff1b;操作系统&#xff1a;CentOS 7.6&#xff1b;JDK&#xff1a;1.8.0_401。 1.代码实现 1.1 E…...

【C#】实现Json转Lua (Json2Lua)

关键词: C#、JsonToLua、Json2Lua、对象序列化Lua 前提需引入NewtonsofJson&#xff0c;引入方法可先在Visual Studio 2019 将Newtonsoft.Json.dll文件导入Unity的Plugins下。 Json格式字符串转Lua格式字符串&#xff0c;效果如下&#xff1a; json字符串 {"1": &q…...