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

【数据结构】线性表

文章目录

  • 前言
  • 线性表的定义和基本操作
    • 1.线性表的定义
    • 2.线性表的基本操作
  • 顺序表的定义
    • 1.静态分配方式
    • 2.动态分配方式
  • 顺序表的插入和删除
    • 1.顺序表的插入
    • 2.顺序表的删除
  • 顺序表的查找
    • 1.按位查找(简单)
    • 2.按值查找
  • 单链表的定义
    • 1.代码定义一个单链表
    • 2.不带头节点的单链表
    • 3.带头节点的单链表
  • 单链表的插入和删除
    • 1.按位序插入带头节点
    • 2.按位序插入不带头节点
    • 3.指定结点的后插操作
    • 4.指定结点的前插操作
    • 5.指定结点的删除操作
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

前言
数据结构是计算机科学中一个重要的基础概念,它研究的是如何组织和管理计算机中的数据。线性表是一种常见的数据结构,它由一组具有相同数据类型的元素组成,这些元素之间存在着线性关系

线性表具有许多重要的应用,例如:

  • 存储和管理数据
  • 实现各种算法
  • 构建其他数据结构
    在本文中,我们将对线性表的概念、特点、实现和应用进行详细的介绍。

提示:以下是本篇文章正文内容,下面案例可供参考

线性表的定义和基本操作

知识总览
在这里插入图片描述

注意:存储结构不同,运算的实现方式也会不同

1.线性表的定义

线性表定义的是数据结构中的逻辑结构
在这里插入图片描述
对于图片中关于,如果所有整数按递增次序排列,是线性表吗

答案是否定的,因为从定义中我们可以知道,有限二字,然后整数是可以无穷无尽的

2.线性表的基本操作

这个图大家看看就行
在这里插入图片描述
这里建议大家把其中的每个操作都动手写一写,或者在编译器上多写一下,熟悉几遍
在这里插入图片描述

对于为什么没有说明各个参数的具体类型?

数据结构书籍中没有说明各个参数的具体类型,是为了提高书籍的通用性、简洁性、灵活性和易读性,并强调对数据结构思想和原理的理解。读者可以通过阅读代码示例和查阅相关资料来了解具体的参数类型。

最后来一个总结的图
在这里插入图片描述

顺序表的定义

在这里插入图片描述
顺序表——用顺序存储的方式实现线性表顺序存储。把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

在这里插入图片描述

1.静态分配方式

我们需要知道顺序表的静态分配方式使用一个数组来实现的,数组的长度一旦确定就无法改变!!!
在这里插入图片描述
关于图片中把各个数据元素的值设为默认值(可省略的原因)?

因为在顺序表结构中有一个length字段,表示的是顺序表中已有元素的个数,因此只要我们初始化了length就行,不根据length来遍历顺序表的行为都是非法的!!!

在这里插入图片描述
代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
#define MAXSIZE 10//定义顺序表的最大空间typedef struct
{int data[MAXSIZE];//利用静态分配方式实现顺序表int length;//顺序表中有效元素的个数
}Sqlist;//类型重命名,取名为Sqlist//初始化一个顺序表
void InitList(Sqlist& L)//利用引用传参
{for (int i = 0; i < MAXSIZE; i++)//这里对数组元素的初始化不进行也可以,因为到时候遍历利用的也是length字段的值去遍历的{L.data[i] = 0;//将数组中的值都初始化为0}L.length = 0;
}int main()
{Sqlist L;InitList(L);return 0;
}

思考:
在这里插入图片描述

这里需要注意,length在初始化的时候不能被省略,如果省略了后果很严重,省略了那么length就是一个随机值

改进后的写法:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
#define MAXSIZE 10//定义顺序表的最大空间typedef struct
{int data[MAXSIZE];//利用静态分配方式实现顺序表int length;//顺序表中有效元素的个数
}Sqlist;//类型重命名,取名为Sqlist//初始化一个顺序表
void InitList(Sqlist& L)//利用引用传参
{//for (int i = 0; i < MAXSIZE; i++)//这里对数组元素的初始化不进行也可以,因为到时候遍历利用的也是length字段的值去遍历的//{//	L.data[i] = 0;//将数组中的值都初始化为0//}L.length = 0;
}//遍历顺序表
void Print(const Sqlist&L)
{for (int i = 0; i < L.length; i++){cout << L.data[i] << " ";}cout << endl;
}
int main()
{Sqlist L;InitList(L);Print(L);return 0;
}

如果数组存满了,那么我们会想到两种解决办法,1.开始的时候就开辟一个足够大的空间,2.进行扩容

对于第一种方法,显然是不可行的,首先程序所需的空间我们在事前是很难预料的,其次如果开辟的空间很大,但是最后使用的空间很小,就会造成空间上很大的浪费!!!对于第二种方法,由于我们采用的是静态分配,空间的大小一定确定就无法更改,所以这里的扩容也进行不下去

在这里插入图片描述

2.动态分配方式

通过之前的内容我们可以知道,静态分配方式实现的顺序表对于扩容的时候很困难,那么由此就引出了动态分配方式实现的顺序表,也就是利用数组指针来实现!!!

注意,王道这里用的都是c语言的malloc函数,但是我本人习惯用C++的new关键字,对于两者的内容可以看我的博客内容!!!

在这里插入图片描述
结构体定义:

#define Elemtype int //这里我把类型设置为int类型
typedef struct
{Elemtype* data;int capacity;int length;
}SqList;

在这里插入图片描述
动态分配相关代码实现:

#include <iostream>
using namespace std;
#define InitSize 10
#define Elemtype int //这里我把类型设置为int类型
typedef struct
{Elemtype* data;int capacity;int length;
}SeqList;void InitList(SeqList& L)
{L.data = new Elemtype[InitSize];L.capacity = InitSize;L.length = 0;
}void IncreaseSize(SeqList& L, int len)//在原来的基础上多增加len个空间
{Elemtype* tmp = L.data;L.data = new Elemtype[len + L.capacity];memcpy(L.data, tmp,L.length*sizeof(Elemtype));//这里由于元素类型是int类型也就是内置类型,所以我用的是memcpy函数,自定义类型慎用!!!!delete[] tmp;//释放原空间L.capacity += len;
}
int main()
{SeqList L;InitList(L);IncreaseSize(L, 5);return 0;
}

扩容前容量是10
在这里插入图片描述

扩容后可以看到容量增加到了15
在这里插入图片描述

同时需要注意增容操作往往需要拷贝数据,拷贝数据需要比较大的时间开销

顺序表的特点!!!
在这里插入图片描述
小总结:
在这里插入图片描述

顺序表的插入和删除

1.顺序表的插入

知识总览
在这里插入图片描述
插入操作介绍
在这里插入图片描述
插入操作的代码实现
在这里插入图片描述

void InsertSeqList(SeqList& L,int pos,int num)//在指定位序下插入元素num
{for (int i = L.length; i >= pos; i--){L.data[i] = L.data[i - 1];}L.data[pos - 1] = num;L.length += 1;
}

对边界情况和异常情况的检查,提高代码的健壮性!!!
在这里插入图片描述

#include <iostream>
using namespace std;
#define MAXSIZE 10
typedef struct
{int data[MAXSIZE];//这里类型用intint length;
}SeqList;//初始化
void InitSeqList(SeqList& L)
{L.length = 0;
}
bool InsertSeqList(SeqList& L,int pos,int num)//在指定位序下插入元素num
{if (pos<1 || pos>L.length + 1){return false;}if (MAXSIZE == L.length)//此时空间已满,不能继续插入{return false;}for (int i = L.length; i >= pos; i--){L.data[i] = L.data[i - 1];}L.data[pos - 1] = num;L.length += 1;return true;
}//遍历顺序表
void Print(const SeqList&L)
{for (int i = 0; i < L.length; i++){cout << L.data[i] << " ";}cout << endl;
}int main()
{SeqList L;InitSeqList(L);InsertSeqList(L, 1, 100);Print(L);return 0;
}

插入操作的时间复杂度
在这里插入图片描述
时间复杂度这里图上说的很清楚,个人觉得没有必要继续阐述了

2.顺序表的删除

顺序表的删除操作
在这里插入图片描述
可以看到,删除操作是需要把后面元素前移的,这里和插入操作恰好相反!!!
在这里插入图片描述

完整代码!!!

#include <iostream>
using namespace std;
#define MAXSIZE 10
typedef struct
{int data[MAXSIZE];//这里类型用intint length;
}SeqList;//初始化
void InitSeqList(SeqList& L)
{L.length = 0;
}
bool InsertSeqList(SeqList& L,int pos,int num)//在指定位序下插入元素num
{if (pos<1 || pos>L.length + 1){return false;}if (MAXSIZE == L.length)//此时空间已满,不能继续插入{return false;}for (int i = L.length; i >= pos; i--){L.data[i] = L.data[i - 1];}L.data[pos - 1] = num;L.length += 1;return true;
}//遍历顺序表
void Print(const SeqList&L)
{for (int i = 0; i < L.length; i++){cout << L.data[i] << " ";}cout << endl;
}bool ListDelete(SeqList& L, int pos, int& e)//删除顺序表pos位置的值,并将被删除元素的值给e
{if (pos<1 || pos>L.length){return false;}e = L.data[pos-1];for (int i = pos; i < L.length; i++){L.data[i-1] = L.data[i];}L.length--;return true;
}
int main()
{SeqList L;int num = 0;InitSeqList(L);InsertSeqList(L, 1, 1);InsertSeqList(L, 2, 2);InsertSeqList(L, 3, 3);Print(L);if(ListDelete(L, 2, num))cout << num << endl;Print(L);return 0;
}

对于图中,如果参数e没加引用符号会怎么样的问题?

如果参数e没加引用符号,那么形参会是实参的拷贝,在main函数中输出的num的值依旧是0

删除操作的时间复杂度
在这里插入图片描述
小总结:
在这里插入图片描述

顺序表的查找

知识总览:
在这里插入图片描述

1.按位查找(简单)

在这里插入图片描述
由于顺序表随机存取的特性,显然他的时间复杂度是O(1),其他的没什么太多可说的,都很好理解
在这里插入图片描述
代码

这里我的参数加了引用,因为引用共用的是同一块空间,如果不加引用就会多一次拷贝,增加空间的开销

int GetElem(const SeqList&L,int i)
{return L.data[i-1];
}

2.按值查找

在这里插入图片描述
在这里插入图片描述

代码:

int LocateElem(const SeqList& L, int e)
{for (int i = 0; i < L.length; i++){if (L.data[i] == e)return i + 1;}return -1;
}

在这里插入图片描述

对于结构体类型的元素或是自定义类型的元素不能使用==运算符,c++中需要使用运算符重载才可以使用,c语言不能使用

解决办法
在这里插入图片描述
注意:
在这里插入图片描述
时间复杂度
在这里插入图片描述
小总结:
在这里插入图片描述

单链表的定义

在这里插入图片描述
带头结点和不带头结点
在这里插入图片描述

这里就是说明链式存储的存储密度比顺序存储低
在这里插入图片描述

1.代码定义一个单链表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改进后,单链表的定义

typedef struct LNode
{int data;//数据域struct LNode* next;//指针域
}LNode,*LinkList;
struct LNode
{int data;//数据域struct LNode* next;//指针域
};

在这里插入图片描述
在这里插入图片描述

2.不带头节点的单链表

在这里插入图片描述
代码:

#include <iostream>
using namespace std;
typedef struct LNode
{int data;//数据域struct LNode* next;//指针域
}LNode,*LinkList;//初始化
bool InitList(LinkList& L)
{L = NULL;return true;
}//判断单链表是否为空
bool empty(LinkList L)
{return (L == NULL);
}
int main()
{LinkList L;InitList(L);cout << empty(L) << endl;return 0;
}

3.带头节点的单链表

注意头结点不存储数据
在这里插入图片描述

#include <iostream>
using namespace std;
typedef struct LNode
{int data;//数据域struct LNode* next;//指针域
}LNode,*LinkList;//初始化
bool InitList(LinkList& L)
{L = new LNode;//分配一个头结点,或者用c语言的方式(LNode*)malloc(sizeof(LNode))if (L == NULL)//内存不足,分配失败return false;L->next = NULL;return true;
}//判断单链表是否为空
bool empty(LinkList L)
{return (L ->next== NULL);
}
int main()
{LinkList L;InitList(L);cout << empty(L) << endl;return 0;
}

小结:
在这里插入图片描述

在这里插入图片描述

单链表的插入和删除

在这里插入图片描述
在这里插入图片描述

1.按位序插入带头节点

在这里插入图片描述
在这里插入图片描述

#include <iostream>
using namespace std;
typedef struct LNode
{int data;//数据域struct LNode* next;//指针域
}LNode,*LinkList;//初始化
bool InitList(LinkList& L)
{L = new LNode;//分配一个头结点,或者用c语言的方式(LNode*)malloc(sizeof(LNode))if (L == NULL)//内存不足,分配失败return false;L->next = NULL;return true;
}//在第i个位置插入元素e(带头节点)
bool ListInsert(LinkList& L, int i, int e)
{if (i < 1){return false;}int j = 0;//记录当前是第几个结点LNode* p = L;//临时结点pwhile (p != NULL && j < i-1)//找到第i-1个结点的位置{p = p->next;j++;}if (p == NULL)return false;LNode* s = new LNode;s->data = e;s->next = p->next;p->next = s;return true;
}void Print(LinkList L)
{LNode* p = L;while (p->next != NULL){p = p->next;cout << p->data << " ";}cout << endl;
}//判断单链表是否为空
bool empty(LinkList L)
{return (L ->next== NULL);
}
int main()
{LinkList L;InitList(L);ListInsert(L,1,1);ListInsert(L,2,2);ListInsert(L,3,3);ListInsert(L,4,4);Print(L);return 0;
}

2.按位序插入不带头节点

在这里插入图片描述
在这里插入图片描述
代码:

#include <iostream>
using namespace std;
typedef struct LNode
{int data;//数据域struct LNode* next;//指针域
}LNode, * LinkList;//初始化(不带头节点)
bool InitList(LinkList& L)
{L = NULL;return true;
}//在第i个位置插入元素e(不带头节点)
bool ListInsert(LinkList& L, int i, int e)
{if (i < 1){return false;}if (i == 1){LNode* s = new LNode;s->data = e;s->next = L;L = s;return true;}LNode* p = L;int j = 1;while (p != NULL && j < i - 1){p = p->next;j++;}if (p == NULL)return false;LNode* s = new LNode;s->data = e;s->next = p->next;p->next = s;return true;
}void Print(LinkList L)
{LNode* p = L;while (p != NULL){cout << p->data << " ";p = p->next;}cout << endl;
}//判断单链表是否为空
bool empty(LinkList L)
{return (L == NULL);
}
int main()
{LinkList L;InitList(L);ListInsert(L, 1, 1);ListInsert(L, 2, 2);ListInsert(L, 3, 3);ListInsert(L, 4, 4);Print(L);return 0;
}

3.指定结点的后插操作

在这里插入图片描述
代码:

bool InsertNExtNode(LNode* p, int e)
{if (p == NULL)return false;LNode* s = new LNode;if (s == NULL)return false;s->data = e;s->next = p->next;p->next = s;return true;
}

4.指定结点的前插操作

在这里插入图片描述
代码:

bool InsertPriorNode(LNode* p, int e)
{if (p == NULL)return false;LNode* s = new LNode;if (s == NULL)return false;s->next = p->next;p->next = s;s->data = p->data;p->data = e;return true;
}

5.指定结点的删除操作

在这里插入图片描述
代码:

bool DeleteNode(LNode* p)
{if (p == NULL)return false;LNode* q = p->next;p->data = q->data;p->next = q->next;delete q;return true;
}

小结:
在这里插入图片描述

总结

在本文中,我们对线性表的概念、特点、实现和应用进行了详细的介绍。

线性表的特点是:

  • 元素之间存在着线性关系
  • 每个元素只有一个前驱和一个后继

线性表的实现方式主要有两种:

  • 顺序表
  • 链表

线性表的应用非常广泛,例如:

  • 存储和管理数据
  • 实现各种算法
  • 构建其他数据结构

通过学习本文,读者应该能够:
理解线性表的概念和特点
掌握线性表的实现方法
了解线性表的应用

相关文章:

【数据结构】线性表

文章目录 前言线性表的定义和基本操作1.线性表的定义2.线性表的基本操作 顺序表的定义1.静态分配方式2.动态分配方式 顺序表的插入和删除1.顺序表的插入2.顺序表的删除 顺序表的查找1.按位查找&#xff08;简单&#xff09;2.按值查找 单链表的定义1.代码定义一个单链表2.不带头…...

983. 最低票价 C++

class Solution { public:int mincostTickets(vector<int>& days, vector<int>& costs) {// 状态定义&#xff1a; f[i] 表示 i 天及之后 旅行所需的最小花费int f[366]{};// 标注哪些天 出门for (int v: days) f[v] 1;// 由于状态转移是逆向的 所以倒序 …...

紫光展锐P7885核心板详细参数介绍_5G安卓智能模块开发方案

紫光展锐P7885核心板采用了先进的6nm EUV制程工艺&#xff0c;集成了高性能的应用处理器和金融级安全解决方案&#xff0c;为用户带来了全新的性能体验。 P7885核心板搭载了先进的6nm制程工艺SoC P7885&#xff0c;其中包含四核A76和四核A55&#xff0c;主频可达2.7Ghz&#xf…...

Keil MDK 5.37 及之后版本 安装 AC5(ARMCC) 编译器详细步骤

由于 Keil 5.37 及之后版本不再默认安装 AC5(ARMCC) 编译器&#xff0c;这就会导致由 AC5 编译的工程无法正常编译&#xff0c;往往输出窗口会提示以下信息&#xff1a;*** Target ‘STM32xxxx‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available. —…...

速盾:cdn配置ssl

CDN&#xff08;Content Delivery Network&#xff09;是一种内容分发网络&#xff0c;它的作用是将原始服务器上的内容分发到全球各地的边缘节点上&#xff0c;以提高用户访问速度和稳定性。随着数据传输的安全性要求越来越高&#xff0c;配置SSL&#xff08;Secure Sockets L…...

代码随想录算法训练营 Day41 动态规划3

Day41 动态规划3 343. 整数拆分 思路 不知道如何拆分&#xff0c;才能使乘积最大化 有什么理论依据&#xff1f; 根据代码随想录 拆分使乘积最大化逻辑&#xff1a;应该尽可能拆成相同的数 根据题目&#xff0c;发现&#xff0c;拆分后的数可以继续拆分&#xff0c;因此可…...

面试题:反推B+树高度

一个表5000w数据&#xff0c;一个数据行大小为1k&#xff0c;主键为long类型数据&#xff0c;假设指针大小为8B&#xff0c;页大小为16K&#xff0c;求B树的高度&#xff1f; B树的非叶子节点存储key和指针&#xff0c;叶子节点存储数据&#xff0c;对应表中的某些行。 叶子节点…...

瑞吉外卖实战学习--11、分类管理的列表分页查询

分类管理的列表分页查询 前言1、创建接口2、基于分页组件来实现的 前言 通过前端接口可以看到请求和传递的参数&#xff0c;本文章是基于mybatisPlus的分页插件来实现的 1、创建接口 GetMapping("/page")public R<Page> page(int page,int pageSize){ // …...

网络安全新视角:数据可视化的力量

在当今数字化时代&#xff0c;网络安全已成为各大企业乃至国家安全的重要组成部分。随着网络攻击的日益复杂和隐蔽&#xff0c;传统的网络安全防护措施已难以满足需求&#xff0c;急需新型的解决方案以增强网络防护能力。数据可视化技术&#xff0c;作为一种将复杂数据转换为图…...

Aurora8b10b(2)上板验证

文章目录 前言一、AXI_Stream数据产生模块二、上板效果总结 前言 上一篇内容我们已经详细介绍了基于aurora8b10b IP核的设计&#xff0c;本文将基于此进一步完善并且进行上板验证。 设计思路及代码思路参考FPGA奇哥系列网课 一、AXI_Stream数据产生模块 AXIS协议是非常简单的…...

每天五分钟计算机视觉:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…...

表白墙项目(JAVA实现)

1、在html里 class使用. id使用# 2、记得引入响应依赖&#xff08;举例lombok&#xff09; 3、messageController package com.example.demo.demos.web; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; i…...

openGauss 高级分析函数支持

高级分析函数支持 可获得性 本特性自openGauss 1.1.0版本开始引入。 特性简介 无。 客户价值 我们提供窗口函数来进行数据高级分析处理。窗口函数将一个表中的数据进行预先分组&#xff0c;每一行属于一个特定的组&#xff0c;然后在这个组上进行一系列的关联分析计算。这…...

【Java面试题系列】基础篇

目录 基本常识标识符的命名规则八种基本数据类型的大小&#xff0c;以及他们的封装类3*0.10.3返回值是什么short s1 1; s1 s1 1;有什么错? short s1 1; s1 1;有什么错?简述&&与&的区别&#xff1f;简述break与continue、return的区别&#xff1f;Arrays类的…...

Ubuntu 23.04 安装es

在Ubuntu 23.04上安装Elasticsearch的过程可能与之前版本类似&#xff0c;以下是基于最新稳定版Elasticsearch的一般安装步骤&#xff1a; 准备工作&#xff1a; 确保系统已更新至最新版本&#xff1a; sudo apt update && sudo apt upgrade安装Java Development Kit (…...

gradle 7.0 + 配置

Maven 镜像地址的设置 原来在项目根目录的 build.gradle 中进行设置&#xff0c;但是现在里面只有plugins。 工程的build.gradle的dependencies修改为plugins&#xff0c;替代了引用原来的Gradle版本。 // Top-level build file where you can add configuration options com…...

vue3的ref和reactive对比

一&#xff0c;ref 作用: 定义一个 ref 响应式的数据语法: const xxx ref(initValue) 用法 创建一个包含响应式数据的引用对象&#xff08;reference对象&#xff0c;简称ref对象&#xff09;。 JS中操作数据&#xff1a; xxx.value 模板中读取数据: 不需要.value&#xff0…...

是否应该升级到ChatGPT 4.0?深度对比ChatGPT 3.5与4.0的差异

如果只是想简单地体验AI的魅力&#xff0c;感受大模型的独特之处&#xff0c;或是玩一玩文字游戏&#xff0c;那么升级至ChatGPT 4.0可能并非必需。然而&#xff0c;若你期望将AI作为提升工作学习效率的得力助手&#xff0c;那么我强烈建议你升级到ChatGPT 4.0。 如果你不知道…...

C++刷题篇——04找等值元素

一、题目 二、解题思路 1、分割后放进二维数组 2、使用map&#xff0c;key为数值&#xff0c;value为其坐标 3、遍历二维数组元素&#xff0c;再在map中找该元素对应的value值&#xff08;二维数组形式&#xff09;&#xff0c;倘若value.size为1&#xff0c;那直接返回-1&…...

2024年最新服装erp软件排名!(建议收藏)

随着数字经济时代的到来&#xff0c;传统服装生产企业正在经历深刻的变革。如何实现产业数字化升级&#xff0c;是众多服装企业面临的共同课题。当前&#xff0c;服装类的企业管理软件已经成为企业实现智能化转型的关键。面对已经发生深刻改变的商业竞争环境&#xff0c;传统的…...

Radash一款JavaScript最新的实用工具库,Lodash的平替!

文章目录 Lodash 的痛点进入正题--Radash特点 举例几个常用的api 一说lodash应该大部分前端同学都知道吧&#xff0c;陪伴我们好多年的JavaScript工具库&#xff0c;但是自从 ES6 出现后就慢慢退出前端人的视线&#xff0c;能ES6写的代码绝对不会用Lodash&#xff0c;也不是完全…...

使用node爬取视频网站里《龙珠》m3u8视频

1. 找到视频播放网站 百度一下 龙珠视频播放 精挑细选一个可以播放的网站。 如&#xff1a;我在网上随便找了一个播放网站&#xff0c;可以直接在线播放 https://www.xxx.com/play/39999-1-7.html 这里不具体写视频地址了&#xff0c;大家可以自行搜索 2.分析网页DOM结…...

搜索与图论——Prim算法求最小生成树

在最小生成树问题里&#xff0c;正边和负边都没问题 朴素版prim算法 时间复杂度O(n^2) 生成树&#xff1a;每一次选中的t点&#xff0c;它和集合的距离对应的那条边&#xff0c;就是生成树的一条边 算法流程和dijkstra算法非常相似 #include<iostream> #include<cs…...

sqlmap基础知识

一、sqlmap简介 sqlmap是一个开源的渗透测试工具&#xff0c;可以自动检测和利用SQL注入漏洞以及接管数据库服务器的过程。 官网&#xff1a; sqlmap.org 核心功能 漏洞检测漏洞利用 学习关键点 基于sqlmap进行sql注入漏洞的检测&#xff0c;注入利用和攻击基于sqlmap进…...

读《C Primer Plus》

1、汇编语言是为特殊的中央处理单元设计的一系列内部指令&#xff0c;使用助记符来表示&#xff1b;不同的CPU系列使用不同的汇编语言。 2、C语言充分利用计算机优势&#xff0c;使它具有汇编语言才有的微调控能力&#xff0c;可移植性极好。 3、C语言可以访问硬件、操作内存…...

深入理解计算机系统 家庭作业 2.66

/* 前置条件:无符号整数右移不产生1 调用函数是为了可以查看整个过程,不影响结果. 思路是让x在右移的过程中,把最高位之前的位全部填满. 填满后的结果右移一位(即x的最高位变为0,其他为1),再异或x得到最高位 以此类推知道覆盖到32位. */ #include <stdio.h> #inclu…...

【服务端】node.js详细的配置

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…...

二、CentOS基础配置(1.网络与包管理)

文章目录 二、基础配置操作1、网络管理&#xff08;配置静态地址并进行ssh远程连接&#xff09;&#xff08;1.&#xff09;静态地址配置&#xff08;2.&#xff09;IP配置注释&#xff08;3.&#xff09;配置SSH远程连接 2、包管理&#xff08;1.&#xff09;yum软件包管理器1…...

Golang基础-5

Go语言基础 介绍 基础 切片 切片声明 切片初始化 切片基础操作 多维切片 介绍 本文介绍Go语言中切片(slice)(切片声明、切片初始化、切片基础操作、多维切片)等相关知识。 基础 切片 切片&#xff08;slice&#xff09;是对数组的一个连续片段的引用&#xff0c;切…...

Mysql数据库:故障分析与配置优化

目录 前言 一、Mysql逻辑架构图 二、Mysql单实例常见故障 1、无法通过套接字连接到本地MySQL服务器 2、用户rootlocalhost访问被拒绝 3、远程连接数据库时连接很慢 4、无法打开以MYI结尾的索引文件 5、超出最大连接错误数量限制 6、连接过多 7、配置文件/etc/my.cnf权…...

移动终端网站建设/今天的国际新闻

安全3A Authentication&#xff1a;认证Authorization&#xff1a;授权Accouting|Audition&#xff1a;审计 用户user 令牌token,identityLinux用户&#xff1a;Username/UID管理员&#xff1a;root, 0普通用户&#xff1a;1-60000 自动分配系统用户&#xff1a;1-499, 1-999 &…...

网站的发布方案有哪些/郑州网站推广报价

首先需要在控制台找到EBS&#xff0c;那个地方可以修改EBS存储的容量&#xff0c;6个小时只能改一次。修改完成后&#xff0c;在ec2上使用lsblk命令可以看到 xdva容量变成刚才设置的容量了&#xff0c;但是 /dev/xvda1的容量还是原来的值&#xff0c;需要手动操作一下。 使用 …...

寿光专业做网站的公司/域名注册服务网站哪个好

由于 WordPress大部分的主题都是使用Google的在线字体方案&#xff1a;Google Fonts. Google服务不稳定&#xff0c;导致大量独立博客字体加载不出来&#xff0c;直接导致博客打开速度变慢&#xff0c;严重时甚至导致网站打不开. 解决方案1&#xff1a; 编辑 WordPress 中的文…...

react wordpress 知乎/南宁seo公司哪家好

传送门...

wordpress+php允许上传文件大小/怎么给公司做网站

1、GUI偏重功能和页面测试&#xff0c;应使用工具如Selenium、QTP&#xff08;UFT&#xff09;来完成自动化测试。 Selenium简介&#xff1a; 1.0核心是Selenium RC&#xff0c;RC Server Client Lib组成&#xff0c;RCServer包括Launcher、Http Proxy、Selenium Core三个部…...

做运营的网站/东莞seo建站优化工具

需要用到php判断浏览器&#xff0c;于是google了&#xff0c;下出来的都是相同的于是就copy了下来就开始用&#xff0c;结果在判断Opera的时候卡壳了整死都出不来&#xff0c;于是搜索了下strpos函数&#xff0c;解释是“返回字符串在另一个字符串中第一次出现的位置”再看了下…...