线性表 链表表示
初识链表
- 用一组物理位置任意的存储单元来存放线性表的数据元素。
- 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。
- 链表中元素的逻辑次序和物理次序不一定相同。
在存储自己内容的同时也存储下一个元素的地址。存储数据元素的域称为数据域,存储直接后继位置的域称为指针域。指针域中存储的信息称作指针或链。这两部分信息组成ai的存储映象称为结点(Node)。n个结点(ai(1≤i≤n)的存储映象链结成一个链表,即为线性表。把链表中第1个结点的存储位置叫头指针。最后一个元素意味着没有直接后继规定最后一个结点指针为空(通常用NULL或^表示)
单链表由头指针唯一确定,因此单链表可用头指针名字来命名。
单链表、双向链表、循环链表 其他基础辨析
结点只有一个指针域的链表称为单链表或线性链表
结点有两个指针域的链表称为双链表
首尾相接的链表叫循环链表
为了更加方便对链表进行操作,会在单链表的第1个结点前附设一个头结点.头结点的数据域可以不存储任何信息,也可以存储如线性表的长度等附加信息,头结点的指针域存储指向线性表第1个元素的结点。
头指针:
指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针;
头指针具有标识作用,所以常用头指针冠以链表的名字;
无论链表是否为空,头指针均不为空。头指针是链表的必要元素
头结点:
头结点是为了操作的统一和方便而设立的,放在第一元素的结点之前,其数据域一般无意义(也可存放链表的长度)
有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作与其它结点的操作就统一了
头结点不一定是链表必须要素
首元结点:
是指链表中存储第一个数据元素a1的结点
思考
如何表示空表
-
无头结点时,头指针为空时表示空表
-
有头结点时,当头结点的指针域为空时表示空表
有头结点有什么好处?
①有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作与其它结点的操作就统一了
②便于空表和非空表的统一处理
当链表不设头结点时,假设L为单链表的头指针,它应该指向首元结点,则当单链表为长度n为0的空表时,L指针为空(判定空表的条件可记为:L == NULL)。增加头结点后,无论链表是否为空,头指针都是指向头结点的非空指针。头指针指向头结点。若为空表,则头结点的指针域为空(判定空表的条件可记为:L ->next == NULL)
链表(链式存储结构)的特点
- 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻。
- 访问时只能通过头指针进入链表,并通过每个结点的指针域依次向后顺序扫描其余结点,所以寻找第一个结点和最后一个结点所花费的时间不等
-
顺序表→随机存取
-
链表→顺序存取
单链表基本操作实现
单链表的初始化(带头结点的单链表)
- 即构造一个空表
步骤:
-
生成新结点作头结点,用头指针L指向头结点
-
将头结点的指针域置空
Status InitList(LinkList &L) { //构造一个空的单链表LL = new LNode; //生成新结点作为头结点,用头指针L指向头结点L->next = NULL; //头结点的指针域置空return OK;}
补充单链表的几个常用简单算法
自我感觉除了判空都没啥用
判断链表是否为空
int ListEmpty(LinkList L) //若L为空表,则返回1,否则返回0
{if(L->next) //非空return 0;else return 1;
}
单链表的销毁
链表销毁后不存在
- 从头指针开始依次释放所有结点
void DestoryList(Lnode* L)
{Lnode* p;while (L) {p = L;L = L->next;free(p);}return;
}
清空单链表
链表仍存在,但链表中无元素,成为空链表(头指针和头结点仍然在)
- 依次释放所有结点,并将头结点指针域设置为空
void ClearList(Lnode* L)
{Lnode* p, * q;p = L->next;while (p){q = p->next;free(p);p = q;}L->next = NULL;
}
求单链表的表长
- 从首元结点开始,依次计数
int ListLength(Lnode* L)
{int i = 0;Lnode* p = L->next; //p指向第一个结点while (p){i++;p = p->next;}return i;
}
取值——取单链表第i个元素
- 从链表的头指针出发,顺着链域next逐个结点往下搜索,直至搜索到第i个结点为止。因此,链表不是随机存取结构。
/*初识条件:顺序线性表L已存在,1 ≤ i ≤ListLength(L)操作结构:用e返回L中第i个数据元素的值。
*/
int GetElem(LinkList L, int i, int* e)
{int j;Lnode* p; //声明一结点pp = L->next; //让p指向链表L的第一个结点j = 1; //j为计数器while (p && j < i ) //p不为空或者计数器j还没有等于i时循环继续{p = p->next; //让p指向下一个结点j++;}if (!p || j > i){return -1; //第i个元素不存在}*e = p->data; //取第i个元素的数据return *e;
}
算法分析:
该算法的基本操作是比较 j 和 i 并后移指针 p,while循环体中的语句频度与位置 i 有关。若 1 ≤ i ≤ n ,则频度为 i - 1 ,一定能取值成功;若 i > n,则频度为n,取值失败。因此取值算法的时间复杂度为O(n)。
假设每个位置上的元素取值概率相等,即:pi = 1/n
则:
按值查找——根据特定数据获取该数据所在地址
- 从第一个及诶点依次与e比较
- 如果找到一个与e相等的元素,则返回在列表中的地址
- 如果查边整个链表都没有找到和e相等的元素停止循环,并返回
Lnode* LocateElem(LinkList L, int e)
{// 在线性表L中查找值为e的数据元素//找到,则返回L中值为e的数据元素的地址,查找失败返回NULL(因为p最后指向了NULL)Lnode* p;p = L->next;while (p && p->data != e){p = p->next;}return p;
}
返回该数据位置序号
相当于多加了个计数器而已
int LocateElem2(LinkList L, int e)
{//返回L中值为e的数据元素的位置序号,查找失败返回0Lnode* p;p = L->next;int j = 1;while (p && p->data != e){p = p->next; j++;}if (p) return j;else return -1;
}
该算法的执行时间与待查找的值e相关, 其平均时间复杂度分析类似于算法2.7,也为O(n)。
单链表的插入
- 首先找到ai-1的存储结构p。
- 生成一个数据域为e的新结点s。
- 插入新结点:
- 新结点的指针域指向结点ai
s->next = p->next
- 结点ai-1的指针域指向新结点
p->next = s;
- 新结点的指针域指向结点ai
/*i表示插入第几个元素之前
最后L要+1*/
void ListInsert(LinkList L,int i ,int e)
{int j;Lnode* p, * s;p = L; //查找算法从首元素开始p=L->next;j=1【插入算法i=1它的前一个结点的头结点j=i-1不循环】j = 0;while (p && j < i - 1){p = p->next;j++;}if (!p || j > i - 1){printf("error");//插入错误,,,并提示return;}s = (Lnode*)malloc(sizeof(Lnode));s->data = e;s->next = p->next; p->next = s;return;
}
单链表的删除
按位删除
- 找到第i-1个结点,如果有必要的话保存ai的值且将地址存于在q中以被释放
- 找到ai-1的位置赋值给ai-1的next域
- 释放ai
p->next = p->next->next
/*删除L的第i个数据元素,并用e返回其值,L的长度减1*/
void Listdelete(LinkList L, int i, int* e)
{int j;Lnode* p, * q;p = L; //*i=1,p是头结点p=L;j = 0;while (p->next && j < i - 1)//遍历寻找第i-1个元素{p = p->next;j++;}if (!(p->next) || j > i - 1){/* printf("") */return; //第i个元素不存在,并提示}q = p->next;p->next = p->next->next; //或者p->next=q->next *e = q->data;free(q);}
按值删除
/*按值删除*/
void ListdeleteElem(LinkList L, int e)
{//先查找 有才能删//需要另写一个定位函数int index = find(L, e);if (index == -1){//没找到}else {//定位到前一个元素Lnode* temp;temp = L;int i = 0;while (i < index)//定位置{temp = temp->next;i++;}Lnode* free_node = temp->next;temp->next = temp->next->next;free(free_node);}
}int find(LinkList L, int key)
{ //定位函数,定位到待删除元素的前一个Lnode* temp;int i = 0;temp = L->next;while (temp != NULL){if (temp->data == key){return i;}temp = temp->next;i++;}return -1;
}
头插法 &尾插法建立单链表
头插法 – 元素插入在链表头部 (前插法)
- 从一个空表开始,重复读入数据;
- 生成新结点,将读入数据存放到新结点的数据域中
- 从最后一个结点开始,依次将各结点插入到链表的前端
/*头插法*/
void Linkinsert_head(LinkList L, int e)
{Lnode* temp = (Lnode*)malloc(sizeof(Lnode));// 创建新结点//if判断malloc是否分配成功temp->next = L->next;L->next = temp;temp->data = e;
}/*当然也可以考虑加个循环,连续插入*/
尾插法
- 从一个空表L开始,将新结点逐个插入到链表的尾部,尾指针r指向链表的尾结点。
- 初始时,r同L均指向头结点。每读入一个数据元素则申请一个新结点,将新结点插入到尾结点后,r指向新结点。
/*尾插法*/
void Linkinsert_tail(LinkList L, int e)
{Lnode* temp = (Lnode*)malloc(sizeof(Lnode));// 创建新结点temp->next = NULL;Lnode* r, *p; r = L;p->data = e;p->next = NULL;r->next = p;// 插入到表尾r = p; //r指向新尾结点
}
代码总结
#include<stdio.h>
#include<stdlib.h>typedef struct Lnode { //声明结点的类型和指向结点的指针类型int data; //结点数据域struct Lnode* next; //结点指针域
}Lnode, *LinkList; //LinkList为指向结构体Lnode的指针类型/*初始化 空链表
*/Lnode* InitList(LinkList L)
{L = (Lnode*)malloc(sizeof(Lnode);if (L == NULL){printf("分配失败"); //提示分配失败}else {L->next = NULL;}return L;
}void DestoryList(Lnode* L)
{Lnode* p;while (L) {p = L;L = L->next;free(p);}return;
}void ClearList(Lnode* L)
{Lnode* p, * q;p = L->next;while (p){q = p->next;free(p);p = q;}L->next = NULL;
}int ListLength(Lnode* L)
{int i = 0;Lnode* p = L->next; //p指向第一个结点while (p){i++;p = p->next;}return i;
}/*初识条件:顺序线性表L已存在,1 ≤ i ≤ListLength(L)操作结构:用e返回L中第i个数据元素的值。
*/
int GetElem(LinkList L, int i, int* e)
{int j;Lnode* p; //声明一结点pp = L->next; //让p指向链表L的第一个结点j = 1; //j为计数器while (p && j < i ) //p不为空或者计数器j还没有等于i时循环继续{p = p->next; //让p指向下一个结点j++;}if (!p || j > i){return -1; //第i个元素不存在}*e = p->data; //取第i个元素的数据return *e;
}
/*按值查找*/
Lnode* LocateElem(LinkList L, int e)
{// 在线性表L中查找值为e的数据元素//找到,则返回L中值为e的数据元素的地址,查找失败返回NULL(因为p最后指向了NULL)Lnode* p;p = L->next;while (p && p->data != e){p = p->next;}return p;
}/*按值查找2 返回位置序号*/
int LocateElem2(LinkList L, int e)
{//返回L中值为e的数据元素的位置序号,查找失败返回0Lnode* p;p = L->next;int j = 1;while (p && p->data != e){p = p->next; j++;}if (p) return j;else return -1;
}/*i表示插入第几个元素之前
最后L要+1*/
void ListInsert(LinkList L,int i ,int e)
{int j;Lnode* p, * s;p = L; //查找算法从首元素开始p=L->next;j=1【插入算法i=1它的前一个结点的头结点j=i-1不循环】j = 0;while (p && j < i - 1){p = p->next;j++;}if (!p || j > i - 1){printf("error");//插入错误,,,并提示return;}s = (Lnode*)malloc(sizeof(Lnode));s->data = e;s->next = p->next; p->next = s;return;
}/*按位删除
删除L的第i个数据元素,并用e返回其值,L的长度减1*/
void Listdelete(LinkList L, int i, int* e)
{int j;Lnode* p, * q;p = L; //*i=1,p是头结点p=L;j = 0;while (p->next && j < i - 1)//遍历寻找第i-1个元素{p = p->next;j++;}if (!(p->next) || j > i - 1){/* printf("") */return; //第i个元素不存在,并提示}q = p->next;p->next = p->next->next; //或者p->next=q->next *e = q->data;free(q);}/*按值删除*/
void ListdeleteElem(LinkList L, int e)
{//先查找 有才能删//需要另写一个定位函数int index = find(L, e);if (index == -1){//没找到}else {//定位到前一个元素Lnode* temp;temp = L;int i = 0;while (i < index)//定位置{temp = temp->next;i++;}Lnode* free_node = temp->next;temp->next = temp->next->next;free(free_node);}
}int find(LinkList L, int key)
{ //定位函数,定位到待删除元素的前一个Lnode* temp;int i = 0;temp = L->next;while (temp != NULL){if (temp->data == key){return i;}temp = temp->next;i++;}return -1;
}/*头插法*/
void Linkinsert_head(LinkList L, int e)
{Lnode* temp = (Lnode*)malloc(sizeof(Lnode));// 创建新结点//if判断malloc是否分配成功temp->next = L->next;L->next = temp;temp->data = e;
}/*尾插法*/
void Linkinsert_tail(LinkList L, int e)
{Lnode* temp = (Lnode*)malloc(sizeof(Lnode));// 创建新结点temp->next = NULL;Lnode* r, *p; r = L;p->data = e;p->next = NULL;r->next = p;// 插入到表尾r = p; //r指向新尾结点
}
相关文章:
线性表 链表表示
初识链表 用一组物理位置任意的存储单元来存放线性表的数据元素。这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。链表中元素的逻辑次序和物理次序不一定相同。 在存储自己内容的同时也存储下一个元素的地址。存…...
面试题JavaScript篇(二)
目录 一、内存泄露 1、是什么 2、导致的原因 二、垃圾回收机制的策略 三、浅拷贝和深拷贝 1、浅拷贝 .slice() ...展开运算符 Object.assign(目标对象, 被复制的对象) ...展开运算符 2、深拷贝 structuredClone() 浏览器提供 JSON.parse(JSON.stringify(obj)) …...
项目管理工具dhtmlxGantt甘特图入门教程(十五):从MS项目导入/导出(下)
这篇文章给大家讲解dhtmlxGantt请求大文件导入的大小限制。 dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足应用程序的所有需求,是完善的甘特图图表库 DhtmlxGantt正版试用下载(qun 764148812)https:…...
2023 年 6 大智能合约语言
如果你想成为一名 Web3 开发人员,你需要知道如何编写智能合约,智能合约是所有 Web3 应用程序的支柱。 简而言之,智能合约是在区块链网络上部署和执行的计算机程序,提供确定性保证,使多方能够达成一致的、防篡改的结果…...
家用洗地机哪款最好用?全球洗地机十大品牌
近年来,智能家用电器洗地机已经融入到我们生活中了,成为最受欢迎的清洁工具了,家用洗地机吸拖洗一体,不用先扫后拖那么麻烦,只需轻轻一推,就能把扫地、拖地、擦地的活全干了,操作简单࿰…...
【2223sW2】LOG1
写在前面 好好学习,走出宿舍,走向毕设! 一些心路历程记录,很少有代码出现 因为鬼知道哪条代码到时候变成毕设的一部分了咧,还是不要给自己的查重挖坑罢了 23.2.27 文件批量重命名 为了给学姐先整出来一批训练数据&…...
Spring Cloud配置application.yml与bootstrap.yml区别及多profile配置 | Spring Cloud 6
一、前言 Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap,另外一种是 application。 1.1 两者区别 bootstrap.yml/bootstrap.properties 和 application.yml/application.yml 都可以用来配置参数。…...
springboot通过aop实现全局日志(是否自定义注解都可以)
内容参考自以下两个链接1、springboot中使用AOP切面完成全局日志_aop全局日志_邹飞鸣的博客-CSDN博客使用AOP记录日志_aop日志_trusause的博客-CSDN博客第一个链接思路很清晰,讲的也很详细,第二个链接讲了自定义注解为了便于自己理解做了以下整理目录 1.aspectj基本概念 2.添加…...
k8s面试题-进阶
1、简述etcd及其特点etcd是CoreOS团队发起的开源项目,是一个管理配置信息和服务发现(service discovery)的项目,它的目标是构建一个高可用的分布式键值(key-value)数据库,基于Go语言实现。特点&…...
预览版Edge申请微软new Bing失败解决方案
文章目录1.首先需要配置科学上网2.下载预览版Edge浏览器卡它bug!卡它bug!卡它bug!没有申请上ChatGPT的朋友们,试试new Bing吧,更新更强大,关于申请方式,网上已经有很多帖子了,其中一…...
Spring中Bean生命周期及循环依赖
spring中所说的bean对象 与 我们自己new的对象(原始对象)是不同的;bean对象是指spring框架创建管理的我们的对象生命周期即:何时生,何时死1.实例化 Instantiation:spring通过反射机制以及工厂创建出来的原始对象;2.属性…...
【3.1】MySQL锁、动态规划、Redis缓存,过期删除与淘汰策略
5.4 MySQL死锁了,怎么办? RR隔离级别下,会存在幻读的问题,InnoDB为了解决RR隔离级别下的幻读问题,就引出了next-key 锁,是记录锁和间隙锁的组合。 Record Lock,记录锁,锁的是记录本身…...
Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别
PythonYolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!前言这篇博客针对<<PythonYolov5跌倒摔倒人体特征识别>>编写代码,代码整洁&…...
计算机底层:储存器的性能指标(CPU和内存等硬件的性能以及 对比标准)
计算机底层:储存器的性能指标(CPU和内存等硬件的性能以及 对比标准) 内存: MAR是存放地址的寄存器;MDR是存放数据的寄存器。 MAR是存放地址的寄存器,那么其中的二进制位一定是不能重复的,试想,如果有有两个…...
操作留痕功能实现与探讨
操作留痕功能实现与探讨 背景 接手了一个单体应用项目,看系统介绍,说实现了【高性能的操作日志留痕】功能,就有点好奇它是怎么设计的,是阻塞队列还是怎样的线程池。结果我打开代码一看,真的是笑洗个人了。它是做了一…...
深入浅出消息队列MSMQ
消息队列MSMQ,相信稍有开发经验的小伙伴都了解一些。开始讲解之前,我们先弄清楚一件事,为什么我们要使用MSMQ: 您可能认为您能够通过一个简单的数据库表(一个应用程序往其中写入数据,另一个应用程序从中读取数据)来应用…...
Maven多模块开发
POM主要功能 maven学习教程很多,就不在赘述可以参考以下网站,这里只说明maven实际运用。 https://blog.csdn.net/xwh3165037789/article/details/121545762 菜鸟教程 Maven POM POM是在使用Maven构建项目最重要的部分, POM 中所有信息位于&l…...
QT之OpenGL帧缓冲
QT之OpenGL帧缓冲1. 概述1.1 帧缓冲的创建与删除1.2 帧缓冲的数据来源1.2.1 数据源与帧缓冲的关系1.2.2 纹理Attachment1.2.3 渲染缓冲对象Attachment1.2.4 两者的区别1.2.5 关于两者的使用场景2. Demo3. 后期处理4. 参考1. 概述 OpenGL管线的最终渲染目的地被称作帧缓冲(fram…...
$ 6 :选择、循环
if-else语句 #include <stdio.h> //判断输入值是否大于0 int main() {int i;while (scanf("%d",&i)){if (i > 0)//不要在括号后加分号{printf("i is bigger than O\n");}else {printf("i is not bigger than O\n");}}return O; } …...
【项目设计】高并发内存池 (四)[pagecache实现]
🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…...
玩转qsort——“C”
各位CSDN的uu们你们好呀,今天小雅兰的内容还是我们的深度剖析指针呀,上篇博客我们学习了回调函数这个知识点,但是没有写完,因为:小雅兰觉得qsort值得单独写出来!!!好啦,就…...
【干货】又是一年跳槽季!Nginx 10道核心面试题及解析
Nginx是一款轻量级的高性能Web服务器和反向代理服务器,由俄罗斯的Igor Sysoev开发。它具有占用资源少、高并发、稳定性高等优点,被广泛应用于互联网领域。在Nginx的面试过程中,面试官通常会提出一些核心问题,本文将介绍一些常见的…...
【线程安全的HashMap有哪些,CurrentHashMap底层是怎么实现线程安全的】
在 Java 中,线程安全的 HashMap 通常有以下几种实现: Collections.synchronizedMap 方法:该方法可以将 HashMap 转换为线程安全的 Map。 Hashtable 类:Hashtable 是一种线程安全的集合类,它与 HashMap 类似࿰…...
C语言-结构体【详解】
一、 结构体的基础知识 结构是一些值的集合,这些值称为成员变量结构的每个成员可以是不同类型的变量 (1)结构体的声明 写法一: 注: 括号后边的分号不能忘结构体末尾可以不创建变量,在主函数中再创建 struc…...
浏览器输入url到页面渲染完成经历了哪些步骤
一、URL解析 这一步比较容易理解,在浏览器地址栏输入url后,浏览器会判断这个url的合法性 ,以及是否有可用缓存,如果判断是 url 则进行域名解析,如果不是 url ,则直接使用搜索引擎搜索 二、域名解析 输入…...
大数据技术之Hadoop(Yarn)
第1章Yarn资源调度器思考:1)如何管理集群资源?2)如何给任务合理分配资源?Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等…...
5.建造者模式
目录 简介 四个角色 应用场景 实现步骤 和工厂模式的区别 简介 建造者模式也叫生成器模式,是一种对象构建模式;它可以把复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象;…...
数据库基础-数据库基本概念(1-1)
你好,欢迎来到数据库基础系列专栏,欢迎留言互动哦~ 目录一、数据库基础1. 数据库基本概念1.1 数据库1.2 什么是数据库管理软件1.3 表1.4 行1.5 列和数据类型1.6 主键1.7 什么是 SQL一、数据库基础 1. 数据库基本概念 1.1 数据库 数据库是一个以某种有…...
学习笔记-架构的演进之服务容错策略-服务发现-3月day01
文章目录前言服务容错容错策略附前言 “容错性设计”(Design for Failure)是微服务的一个核心原则。 使用微服务架构,拆分出的服务越来越多,也逐渐导致以下问题: 某一个服务的崩溃,会导致所有用到这个服务…...
采编式AIGC视频生产流程编排实践
作者 | 百度人工智能创作团队 导读 本文从业务出发,系统介绍了采编式 TTV的实现逻辑和实现路径。结合业务拆解,实现了一个轻量级服务编排引擎,有效实现业务诉求、高效支持业务扩展。 全文6451字,预计阅读时间17分钟。 01 背景 近…...
王者荣誉网站怎么做/营销心得体会感悟300字
【来信】 尊敬的贺老师: 你好,我是烟大计算机学院大一的学生,曾有幸听过您的一节课,我的老师也曾向我们提起过你,我知道您是一位热心的领路人,我这里有一些问题想请教你,希望您能帮我解答一下…...
网站开发项目源码/营销平台建设
参考链接: http://www.desktx.com/news/diannaojiqiao/4369.html 1、新建一个文本文档,将下面的代码复制进去: [Version] Signature"$Chicago$" [DefaultInstall] DelRegDeleteMe [DeleteMe] HKCU,"Software\Microsoft\Wind…...
公司门户网站源码/企业网络营销策划案例
局域网计算机文件共享,您可能没有权限使用网络资源。请与这台服务器的管理员联系以查明您是否有访问权限2010-05-31 15:07:00| 分类: 电脑技术 | 标签:|字号大中小如果出现“xxx计算机无法访问,您可能没有权限使用网络资源。请与…...
建设交易网站多少钱/seo推广优化方案
步骤 配置路由规则,使用children配置项: routes:[{path:/about,component:About,},{path:/home,component:Home,children:[ //通过children配置子级路由{path:news, //此处一定不要写:/newscomponent:News},{path:message,//此处一定不要写…...
手机wap网站制作需要多少钱/搜索引擎是指什么
可以使用 clickhouse-client 命令行工具来导出 ClickHouse 表的数据。 使用方法如下: clickhouse-client --query"SELECT * FROM<database>.<table>" > <file>.csv...
网站开发外文参考文献/百度统计代码
24.文件a1.txt内容(注意每行中的空格是不一样的,需要对空格进行处理)序号 部门 人数 平均年龄 备注 1 python 30 26 单身狗 2 Linux 26 30 没对象 3 运营部 20 24 女生多通过代码,将其构建成这种数据类型:…...