有关线性表的算法题

1.回文字符串

判断一个非空字符串是否是回文。

#include  <iostream>
#include  <string>
using  namespace  std;bool  judge(string  str) {int len = 0;for (int i = 0; i < 100; i++) {if (str[i] < 65 || str[i]>122) {break;}len++;//计算字符串的大小}for (int i = 0; i < len; i++) {if (str[i] != str[len - i - 1]) {return false;}//回文数/*此处将反面作为判断,因为正面必须所有字符都满足才可以,稍微麻烦*/}return true;
}
int  main()
{string  s;getline(cin, s);bool  res = judge(s);if (res)cout << "YES" << endl;elsecout << "NO" << endl;return  0;
}

2.奇偶数排序

已知数组A[n]中的元素是整型,设计算法将其调整为左右两部分,其中左边是奇数,右边是偶数。并要求算法的时间复杂度是O(n),空间复杂度是O(1)。

#include  <iostream>
using  namespace  std;
void  split(int  A[], int  n) {int temp;int i=0, j=n-1;while (i < j) {       while (i < j && A[i] % 2 != 0) i++;while (i < j && A[j] % 2 == 0) j--;if (i<j) {temp = A[i];A[i] = A[j];A[j] = temp;}}
}
void  show(int  A[], int  n) {for (int i = 0; i < n; ++i)cout << A[i] << "  ";cout << endl;
}
int  main()
{int  n;cin >> n;int  a[100];for (int i = 0; i < n; ++i)cin >> a[i];split(a, n);show(a, n);return  0;
}

3.循环左移

将一个具有 n 个元素的数组A[n]向左循环移动k个位置,要求时间复杂度为O(n),空间复杂度为O(1)。

#include <iostream>
using  namespace  std;
void  reverseArr(int  A[], int  start, int  rear) {//倒置算法int temp;int len = rear - start + 1;for (int i = 0; i < len / 2; i++){temp = A[start + i];A[start + i] = A[rear - i];A[rear - i] = temp;}
}
void  leftCir(int  A[], int  n, int  k) {if (k <= 0 || k >= n)cout << "ERROR" << endl;else {/*将这个问题看作是把数组AB转换成数组BA(A代表数组的前 i 个元素,B代表数组中余下的 n – i 个元素),先将A置逆得到A',再将B置逆得到B',最后将整个A'B'置逆得到(A'B')' = BA*/reverseArr(A, 0, k - 1);reverseArr(A, k, n - 1);reverseArr(A, 0, n - 1);}
}
void  show(int  A[], int  n) {for (int i = 0; i < n; ++i)cout << A[i] << "  ";cout << endl;
}
int  main()
{int  n, p;cin >> n >> p;int  a[100];for (int i = 0; i < n; ++i)cin >> a[i];leftCir(a, n, p);show(a, n);return  0;
}

4.求最大值与次最大值

找出整型数组A[n]中的最大值和次最大值

#include <iostream>using namespace std;
void getMax(int A[],int n,int &fMax,int &sMax){int temp;for (int i = 0; i < n; i++){for (int j = 0; j < n - 1; j++){if (A[j] < A[j + 1]) {temp = A[j];A[j] = A[j + 1];A[j + 1] = temp;}}}fMax = A[0];sMax = A[1];
}
int main()
{int n,maxV,nMax;cin>>n;int a[n];for(int i=0;i<n;++i)cin>>a[i];getMax(a,n,maxV,nMax);cout<<maxV<<" "<<nMax<<endl;return 0;
}

5.顺序表插入并且递增有序

已知顺序表L中的元素递增有序排列,设计算法将元素x插入到表L中并保持表L仍递增有序。

#include  <iostream>
using  namespace  std;const  int  MaxSize = 100;
typedef  int  DataType;
DataType  data[MaxSize];
int  length = 0;void  insertList(DataType  elem)
{DataType  data[MaxSize];int i;for (i = 0; i < length; i++){if (data[i] > elem)break;}for (int j = length - 1; j >= i; j--) {data[j + 1] = data[j];}data[i] = elem;length++;
}
void  show()
{DataType  data[MaxSize];for (int i = 0; i < length; ++i)cout << data[i] << "  ";cout << endl;
}
int  main()
{DataType  data[MaxSize];cin >> length;for (int i = 0; i < length; ++i)cin >> data[i];DataType  x;cin >> x;insertList(x);show();return  0;
}

6.删除顺序表元素

在顺序表中删除所有元素值为x的元素,要求空间复杂度为O(1)。

#include  <iostream>
using  namespace  std;
const  int  MaxSize = 100;
typedef  int  DataType;
DataType  data[MaxSize];
int  length;void  deleteList(DataType  elem)
{DataType  data[MaxSize];int acount = 0;int i, j;for (i = 0; i < length; i++) {if (data[i] == elem) {for (j = i; j < length; j++) {data[j] = data[j + 1];}acount++;i--;}}length = length - acount;
}
void  show()
{DataType  data[MaxSize];for (int i = 0; i < length; ++i)cout << data[i] << "  ";cout << endl;
}
int  main()
{DataType  data[MaxSize];cin >> length;for (int i = 0; i < length; ++i)cin >> data[i];DataType  x;cin >> x;deleteList(x);show();return  0;
}

7.顺序表逆置

以顺序表存储非空线性表,编写一个实现线性表就地逆置的算法。空间复杂度均是O(1)。

#include  <iostream>
using  namespace  std;const  int  MaxSize = 100;
typedef  int  DataType;
DataType  data[MaxSize];
int  length;void  reverseList()
{DataType  data[MaxSize];int temp;for (int i = 0; i < length / 2; i++) {temp = data[i];data[i] = data[length - 1 - i];data[length - 1 - i] = temp;}
}
void  show()
{DataType  data[MaxSize];for (int i = 0; i < length; ++i)cout << data[i] << "  ";cout << endl;
}
int  main()
{DataType  data[MaxSize];cin >> length;for (int i = 0; i < length; ++i)cin >> data[i];reverseList();show();return  0;
}

8.单链表逆置

以单链表作存储结构存储非空线性表,编写一个实现线性表就地逆置的算法。空间复杂度均是O(1)。

#include  <iostream>
using  namespace  std;typedef  int  DataType;
typedef  struct  node {DataType  data;node* next;
}node;
node* first;
int  length;void  init()
{first = new  node;first->next = NULL;node* rear = first;cin >> length;for (int i = 0; i < length; ++i) {DataType  elem;cin >> elem;node* s = new  node;s->data = elem;s->next = NULL;rear->next = s;rear = s;}
}
void  reverseList()
{node* q = new node();node* p = first->next;first->next = NULL;while (p != NULL){q = p->next;p->next = first->next;first->next = p;p = q;}}
void  show()
{node* p = first->next;while (p != NULL) {cout << p->data << "  ";p = p->next;}cout << endl;
}
int  main()
{init();reverseList();show();return  0;
}

9.单链表删除重复数值

有一个递增非空单链表,设计一个算法删除值域重复的结点。例如{1,1,2,3,3,3,4,4,7,7,7,9,9,9,},经过删除后变成{1,2,3,4,7,9}。

#include  <iostream>
using  namespace  std;template  <class  DataType>
struct  node {DataType  data;node<DataType>* next;
};template  <class  DataType>
class  linkList {
public:linkList();~linkList();void  Delete();void  show();
private:node<DataType>* first;
};template  <class  DataType>
linkList<DataType>::linkList()
{first = new  node<DataType>;first->next = NULL;node<DataType>* rear = first;int  n;cin >> n;for (int i = 0; i < n; ++i) {DataType  elem;cin >> elem;node<DataType>* s = new  node<DataType>;s->data = elem;s->next = NULL;rear->next = s;rear = s;}
}
template  <class  DataType>
linkList<DataType>::~linkList()
{node<DataType>* p;while (first != NULL) {p = first;first = first->next;delete  p;}
}
template  <class  DataType>
void  linkList<DataType>::Delete()
{node<DataType>* p = first->next;while (p != NULL && p->next != NULL)//遍历链表,查看是否有与p值域相同的结点{if (p->data == p->next->data)//有,删除s{node<DataType>* s = p->next;//生成新结点s,指向重复结点p->next = s->next;//修改指针,此时q->next是s的下一个结点,下一轮继续判断delete s;}else//不同,判断下一个结点p = p->next;}
}template  <class  DataType>
void  linkList<DataType>::show()
{node<DataType>* p = first->next;if (p == NULL)  cout << "Empty";else {while (p != NULL) {cout << p->data << "  ";p = p->next;}cout << endl;}
}
int  main()
{linkList<int>  L;L.Delete();L.show();L.~linkList();return  0;
}

10.查找单链表倒数第k个结点

【问题描述】输入一个单向链表,输出该链表中倒数第k个结点,链表的最后一个结点是倒数第1个节点。

【输入形式】第一行是数据的个数,第二行是空格分割的整型值,第三行是K值。

【输出形式】输出为倒数第K个结点的值,若无,则输出Not Found。

【样例输入】

                   8

                   13 45 54 32 1 4 98 2

                  3

【样例输出】4

【样例说明】K值为3,则输出链表倒数第3个结点的值,为4;数据输入间以空格隔开

#include  <iostream>
using  namespace  std;template  <class  DataType>
struct  node {DataType  data;node<DataType>* next;
};template  <class  DataType>
class  linkList {
public:linkList();~linkList();node<DataType>* reverseFindK(int  k);
private:node<DataType>* first;
};template  <class  DataType>
linkList<DataType>::linkList()
{first = new  node<DataType>;first->next = NULL;node<DataType>* rear = first;int  n;cin >> n;for (int i = 0; i < n; ++i) {DataType  elem;cin >> elem;node<DataType>* s = new  node<DataType>;s->data = elem;s->next = NULL;rear->next = s;rear = s;}
}
template  <class  DataType>
linkList<DataType>::~linkList()
{node<DataType>* p;while (first != NULL) {p = first;first = first->next;delete  p;}
}template  <class  DataType>
node<DataType>* linkList<DataType>::reverseFindK(int  k)
{node<DataType>* p = NULL;node<DataType>* q = NULL;p = first->next;q = first->next;int count = 1;int length = 1;while (q != NULL) {q = q->next;length++;}while (p != NULL) {if (length < k) return NULL;if (count == length - k) {return p;}p = p->next;count++;}
}
int  main()
{linkList<int>  L;int  k;cin >> k;node<int>* p = L.reverseFindK(k);if (p == NULL)cout << "Not  Found" << endl;elsecout << p->data << endl;L.~linkList();return  0;
}

11.逆序打印单链表

写一个函数,逆序打印单链表中的数据(单链表是带有头结点的单链表)。

#include  <iostream>
using  namespace  std;template  <class  DataType>
struct  node {DataType  data;node<DataType>* next;
};template  <class  DataType>
class  linkList {
public:linkList();~linkList();node<DataType>* getFirst();void  reversePrint(node<DataType>* p);
private:node<DataType>* first;
};template  <class  DataType>
linkList<DataType>::linkList()
{first = new  node<DataType>;first->next = NULL;node<DataType>* rear = first;int  n;cin >> n;for (int i = 0; i < n; ++i) {DataType  elem;cin >> elem;node<DataType>* s = new  node<DataType>;s->data = elem;s->next = NULL;rear->next = s;rear = s;}
}
template  <class  DataType>
linkList<DataType>::~linkList()
{node<DataType>* p;while (first != NULL) {p = first;first = first->next;delete  p;}
}template  <class  DataType>
node<DataType>* linkList<DataType>::getFirst()
{return  first;
}template  <class  DataType>
void  linkList<DataType>::reversePrint(node<DataType>* p)
{if (p != NULL) {reversePrint(p->next);cout << p->data << " ";}}
int  main()
{linkList<int>  L;node<int>* p = L.getFirst()->next;if (p == NULL)cout << "Empty" << endl;elseL.reversePrint(p);L.~linkList();return  0;
}

12.删除单链表中大于minK且小于maxK的元素

已知单链表中各结点的元素值为整型且自增有序,设计算法删除单链表中大于minK且小于maxK的所有元素,并释放被删结点的存储空间。

#include  <iostream>
using  namespace  std;typedef  int  DataType;
typedef  struct  node {DataType  data;node* next;
}node;
node* first;void  init()
{first = new  node;first->next = NULL;node* rear = first;int  length;cin >> length;for (int i = 0; i < length; ++i) {DataType  elem;cin >> elem;node* s = new  node;s->data = elem;s->next = NULL;rear->next = s;rear = s;}
}
void  deleteList(DataType  minK, DataType  maxk)
{node* p = first;node* q = first->next;while (q != NULL){if (q->data > minK && q->data < maxk){p->next = q->next;delete q;q = p->next;}else{p = p->next;q = p->next;}}
}
void  show()
{node* p = first->next;if (p == NULL)  cout << "Empty";while (p != NULL) {cout << p->data << "  ";p = p->next;}cout << endl;
}
int  main()
{init();DataType  minK, maxK;cin >> minK >> maxK;deleteList(minK, maxK);show();return  0;
}

13.双循环链表是否对称

判断带头结点的双循环链表是否对称。

#include <iostream>
using namespace std;typedef int DataType;
typedef struct node{DataType data;node* next,*prior;
}node;
node* first;void init( )
{first = new node;first->next = NULL;first->prior = NULL;node* rear = first;DataType elem;while(cin>>elem){node* s = new node;s->data = elem;s->next = NULL;s->prior = rear;rear->next = s;rear = s;}rear->next = first;first->prior = rear;
}
bool equalDulList()
{node* p = first->next;node* q = first->prior;while (p != q && p->prior != q) {if (p->data == q->data){p = p->next;q = q->prior;return true;}else{return false;}}return true;
}
void show()
{node* p = first->next;while(p != first){cout<<p->data<<" ";p = p->next;}cout<<endl;
}
int main()
{init();//show();bool res = equalDulList();if(res) cout<<"YES"<<endl;else cout<<"NO"<<endl;return 0;
}

14.单链表应用:八进制求和

假设用不带头结点的单链表表示八进制数,例如八进制数536表示成如图所示单链表。要求写一个函数Add,该函数有两个参数A和B,分别指向表示八进制的单链表,执行函数调用Add(A,B)后,得到表示八进制A加八进制B所得结果的单链表,结果保留在单链表A中。

1.png

【输入说明】A表的长度和A表中八进制的数码;(中间用空格隔开)

B表的长度和B表中八进制的数码;(中间用空格隔开)

【输出说明】八进制A加八进制B所得结果

        3

        5 3 6

        2

        5 4

【输出样例】

        612

#include  <iostream>
using  namespace  std;typedef  int  DataType;
typedef  struct  node {DataType  data;node* next;
}node;//尾插法构造单链表
void  init(node*& first, int  len)
{first = NULL;node* rear;for (int i = 0; i < len; ++i) {DataType  elem;cin >> elem;node* s = new  node;s->data = elem;s->next = NULL;if (first == NULL) {first = s;rear = first;}else {rear->next = s;rear = s;}}
}
//八进制A加八进制B,结果存在链表A中
void  add(node* A, node* B)
{node* p = A, * q = B;int flag = 0;//int sum = 0;while (p->next != NULL && q->next != NULL) {sum = p->data + q->data + flag;p->data = sum % 8;flag = sum / 8;p = p->next;q = q->next;}//A、B等长if (p->next == NULL && q->next == NULL) {sum = p->data + q->data + flag;p->data = sum % 8;flag = sum / 8;if (flag == 1) {node* s = new node;s->data = flag;s->next = NULL;p->next = s;}}//A比B短if (p->next == NULL && q->next != NULL) {sum = p->data + q->data + flag;//将A中的最后一个结点元素和B中同位置的元素相加后对8取余,并将余数放入A中的最后一个结点的数据域。p->data = sum % 8;//记录好此时p、q所分别指向的结点元素相加后是否有进位。flag = sum / 8;while (q->next != NULL) {node* s = new node;sum = q->next->data + flag;s->data = sum % 8;flag = sum / 8;s->next = NULL;p->next = s;p = p->next;q = q->next;}if (flag == 1 && q->next == NULL) {node* s = new node;s->data = flag;s->next = NULL;p->next = s;}}//A比B长if (q->next == NULL && p->next != NULL) {sum = p->data + q->data + flag;p->data = sum % 8;flag = sum / 8;while (p->next != NULL) {if (flag == 1) {sum = p->next->data + flag;p->next->data = sum % 8;flag = sum / 8;p = p->next;}elsebreak;}if (flag == 1 && p->next == NULL) {node* s = new node;s->data = flag;s->next = NULL;p->next = s;}}
}
void  reverseList(node*& first)
{node* q = first, * p = first;if (first == NULL) {return;}else {while (p->next != NULL) {p = p->next;}first = p;p = q->next;while (q != first) {q->next = first->next;first->next = q;q = p;p = p->next;}}}
void  show(node* first)
{node* p = first;if (p == NULL)  cout << "Empty";else {while (p != NULL) {cout << p->data;p = p->next;}cout << endl;}
}
int  main()
{node* A, * B;int  aLen, bLen;cin >> aLen;init(A, aLen);cin >> bLen;init(B, bLen);reverseList(A);reverseList(B);add(A, B);reverseList(A);show(A);return  0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA】基于HTML与CSS的尚品汇项目

1.代码 index.html <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 引入页签图标 --><link rel"shortcut icon"…

MySQL--索引类型详解

索引的类型 主键索引&#xff1a; PRIMARY KEY&#xff0c;当一张表的某个列是主键的时候&#xff0c;该列就是主键索引&#xff0c;一张表只允许有一个主键索引&#xff0c;主键所在的列不能为空。 创建主键索引的SQL语法&#xff1a; # 给user表中的id字段创建名为id_ind…

【联邦学习综述:概念、技术】

出自——联邦学习综述&#xff1a;概念、技术、应用与挑战。梁天恺 1*&#xff0c;曾 碧 2&#xff0c;陈 光 1 从两个方面保护隐私数据 硬件层面 可 信 执 行 环 境 &#xff08;Trusted Execution Environment&#xff0c;TEE&#xff09;边 缘 计 算&#xff08;Edge Com…

Error attempting to get column ‘add_time‘ from result set

使用Mybatis-plus 重构项目&#xff0c;报错&#xff1a; Error attempting to get column add_time from result set 当前采用技术 1、数据库字段为 datetime 类型 2、使用了mybatis-plus 框架 3、实体类使用了 LocalDateTime 原因参考&#xff1a; Error attempting to ge…

天软特色因子看板(2024.3 第3期)

该因子看板跟踪天软特色因子A08006近一月日度买卖压力2)&#xff0c;该因子为近一个月个股每日的相对价格位置&#xff0c;用以刻画股票所受买卖压力&#xff0c;取作 个于0~1间&#xff0c;指标值越大&#xff0c;反映股票在价格相对高位停留的时间越长&#xff0c;所面临的买…

SSM整合项目(Vue3 + Element - Plus 创建项目基础页面)

文章目录 1.配置Vue启动端口1.修改vue.config.js2.启动 2.安装Element Plus命令行输入 npm install element-plus --save 3.修改Vue3默认样式并自定义一个组件1.修改App.vue1.删除原有结构2.启动项目查看 2.修改HomeView.vue3.删除HelloWorld.vue组件4.创建一个组件 src/compon…

PostgreSQL数据优化——死元组清理

最近遇到一个奇怪的问题&#xff0c;一个百万级的PostgreSQL表&#xff0c;只有3个索引。但是每次执行insert或update语句就要几百ms以上。经过查询发现是一个狠简单的问题&#xff0c;数据库表死元组太多了&#xff0c;需要手动清理。 在 PG 中&#xff0c;update/delete 语句…

SQL: 触发器/存储过程/游标的操作

目录 触发器存储过程创建存储过程修改存储过程删除存储过程执行存储过程 游标待续、更新中 触发器 待更新存储过程 定义 是一组TSQL语句的预编译集合&#xff0c;能实现特定的功能 是一种独立的数据库对象&#xff0c;在服务器上创建和运行 类似于编程语言中的过程或函数分类…

Redis精讲

redis持久化 RDB方式 Redis Database Backup file (redis数据备份文件), 也被叫做redis数据快照. 简单来说就是把内存中的所有数据记录到磁盘中. 快照文件称为RDB文件, 默认是保存在当前运行目录. [rootcentos-zyw ~]# docker exec -it redis redis-cli 127.0.0.1:6379> sav…

开源的python 游戏开发库介绍

本文将为您详细讲解开源的 Python 游戏开发库&#xff0c;以及它们的特点、区别和应用场景。Python 社区提供了多种游戏开发库&#xff0c;这些库可以帮助您在 Python 应用程序中实现游戏逻辑、图形渲染、声音处理等功能。 1. Pygame 特点 - 基于 Python 的游戏开发库。…

算法(6种思想、7种查找)、与数据结构(数组/链表/栈与队列/树)整理总结

算法 除了这里提到的算法思想和查找算法&#xff0c;算法还有别的类型&#xff1a; 排序算法&#xff1a; 对一组元素进行排序的算法。常见的排序算法包括冒泡排序、快速排序、归并排序等。 图算法&#xff1a; 解决图结构相关问题的算法&#xff0c;例如最短路径问题、最小…

Docker容器Docker桌面配置镜像加速

打开Docker Desktop应用程序&#xff0c;点击设置 具体配置如下&#xff1a; {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"features": {"buil…

编译Linux内核并修改版本号后缀为学号-Ubuntu22.04中编译安装Linux内核6.7.8

前言&#xff1a;实验课要求下载最新版本Linux内核并修改版本号&#xff0c;本人在Vmware中Ubuntu22.04中实现&#xff0c;花三天时间查阅大量网站资料。记录一下误打误撞成功的过程&#xff0c;希望对你们有帮助。 目录 一、常规安装步骤&猜想Ubuntu与gcc版本过低 二、安…

202003 青少年软件编程(Scratch)等级考试试卷(一级)

202003 青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;一级&#xff09; 第1题&#xff1a;【 单选题】 在Scratch中&#xff0c;以下哪个区域可以展示编程效果&#xff1f; A:代码区 B:舞台区 C:角色区 D:积木区 【正确答案】: B 【试题解析】…

基于PySide2实现调用本地摄像头抓拍并保存照片(Python版本)

因为横向课题需要&#xff0c;这是其中的一个小小的功能&#xff0c;单独拎出来作为一个小demo&#xff0c;方便后续学习使用 项目实现功能&#xff1a; 点击open按钮&#xff0c;摄像头开启&#xff0c;实时捕获周围图像并显示 点击capture按钮&#xff0c;保存摄像头照片&am…

日期工具的逻辑与数据请求函数的完善

src\libs\utils.js 获取当前日期格式 /*** 获取当前日期格式* param {*} field * returns */ function getNowDate(field) {const date new Date()let year date.getFullYear(),month date.getMonth() 1,day date.getDate()switch (field) {case day:return ${year}-${mo…

02- 使用Docker安装RabbitMQ

使用Docker安装RabbitMQ 下载安装镜像 方式一: 启动docker服务,然后在线拉取 # 在线拉取镜像 docker pull rabbitmq:3-management# 使用docker images查看是否已经成功拉取方式二: 从本地加载 ,将RabbitMQ上传到虚拟机中后使用命令加载镜像即可 docker load -i mq.tar启动M…

LLM实施的五个阶段

原文地址&#xff1a;Five Stages Of LLM Implementation 大型语言模型显着提高了对话式人工智能系统的能力&#xff0c;实现了更自然和上下文感知的交互。这导致各个行业越来越多地采用人工智能驱动的聊天机器人和虚拟助手。 2024 年 2 月 20 日 介绍 从LLMs的市场采用情况可以…

LabelImg:一个简单易用的图像标注工具

目录 LabelImg是什么&#xff1f; 如何使用LabelImg进行图像标注&#xff1f; LabelImg的优势和应用场景 在哪里下载它 随着人工智能技术的不断发展&#xff0c;机器学习和深度学习在图像识别、目标检测等领域中得到了广泛的应用。而要训练一个有效的模型&#xff0c;通常需…

Vue3+ts(day02:CompositionAPI、setup)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…