学习笔记---超基础+详细+新手的顺序表~~

news2024/11/28 11:52:26


目录

1.顺序表的前言

1.1 顺序表--->通讯录📇

1.2 数据结构的相关概念🏇

1.2.1 什么是数据结构

1.2.1 为什么需要数据结构

2. 顺序表概念及分类

2.1 顺序表的概念🐙

2.2 顺序表的分类🐫

2.2.1 顺序表和数组的区别

2.2.2 顺序表分类

1.静态顺序表

2. 动态顺序表 

3. 实现动态顺序表

3.1 要实现的目标🫵

3.2 创建(初始化)顺序表🌺

3.2.1 Seqlist.h

3.2.2 Seqlist.c

3.2.3 test.c

3.2.4 代码测试

3.3 销毁💥

3.3.1 Seqlist.h

3.3.2 Seqlist.c

3.3.3 test.c

3.3.4 代码测试

3.4 尾部插入数据🌈+打印顺序表

3.4.0 思路分析

3.4.1 Seqlist.h

3.4.2 Seqlist.c

3.4.3 test.c

3.4.4 代码测试

3.5 头部插入数据💫

3.5.0 思路分析

3.5.1 Seqlist.h

3.5.2 Seqlist.c

3.5.3 test.c

3.5.4 代码运行测试

3.6 尾部删除数据⛄️

3.6.0 思路分析

3.6.1 Seqlist.h

3.6.2 Seqlist.c

3.6.3 test.c

3.6.4 代码运行测试

​编辑

3.7 头部删除数据🌊

3.7.0 思路分析

3.7.1 Seqlist.h

3.7.2 Seqlist.c

3.7.3 test.c

3.7.4 代码运行测试

3.8 指定位置之前插入数据🍿

3.8.0 思路分析

3.8.1 Seqlist.h

3.8.2 Seqlist.c

3.8.3 test.c

3.8.4 代码运行测试

3.9 指定位置删除数据⚾️

3.9.0 思路分析

3.9.1 Seqlist.h

3.9.2 Seqlist.c

3.9.3 test.c

3.9.4 代码运行测试

4.0 查找数据🍺

4.0.1 Seqlist.h

4.0.2 Seqlist.c

4.0.3 test.c

4.0.4 代码运行测试
​​​​​​​​​​​​​​


1.顺序表的前言

1.1 顺序表--->通讯录📇

我们前面学习了C语言,它能够帮助我们实现通讯录📇项目,要想实现通讯录项⽬有两个技术关键:

1)C语⾔语法基础

2)数据结构之顺序表/链表(链表我们下下期讲)

1.2 数据结构的相关概念🏇

1.2.1 什么是数据结构

数据结构是计算机存储、组织数据的⽅式

数据肉眼可见的信息,例如:数值1,2......  网页信息......

结构:借助数组这样的数据结构将⼤量的同一类型的数据组织在⼀起

总结:

1)能够存储数据(如顺序表、链表等结构)

2)存储的数据能够⽅便查找


1.2.1 为什么需要数据结构

我们要知道最简单的数据结构是数组

通过数据结构,能够有效将数据组织和管理在⼀起。按照我们的⽅式任意对数据进⾏增删改查等操作。


但是,数组不满足于复杂场景数据的管理:

1.数组仅存储同类型的数据  eg.int  arr[10]     char  arr[10]

2.数组可提供的接口不足以支撑复杂场景的数据处理--->这就是为什么我们要学习其他的数据结构:通过数据结构,我们可以先写出底层逻辑,然后直接调用。例如C语言的sizeof

2. 顺序表概念及分类

2.1 顺序表的概念🐙

顺序表是线性表的一种。(他们的关系可以类比于西瓜🍉和水果的关系(包含关系))

线性表指的是具有相同特性的一类数据结构的总称。常⻅的线性表:顺序表、链表、栈、队列、字符串... 

相同特性:逻辑结构一定是线性的,在物理结构不一定是线性的

逻辑结构人为想象出来的,排列起来成线性,例如排队在逻辑结构上就是线性的(像一条线一样排列)

物理结构内存存储上按照线性排列,例如数组的每个元素地址在物理结构上就是线性的(相邻元素地址是连续的)

顺序表的底层结构是数组--->顺序表逻辑结构一定是线性的,在物理结构上也一定是线性的

2.2 顺序表的分类🐫

2.2.1 顺序表和数组的区别

◦ 顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝

2.2.2 顺序表分类

1.静态顺序表

概念:使⽤定⻓数组存储元素

//静态顺序表
struct Seqlist
{
int a[100];//定长数组
int size;//有效数据个数
}

静态顺序表缺陷:空间给少了不够⽤,给多了造成空间浪费


2. 动态顺序表 

概念:使⽤动态数组存储元素

//动态顺序表
struct Seqlist
{
int* a;//动态数组
int size;//有效数据个数
int capacity;//空间大小
}

动态顺序表优点:按需申请空间,不造成浪费或者不够用,还可以扩容


3. 实现动态顺序表

这里,我们需要创建头文件和源文件

头文件:结构的实现和声明,函数的声明

源文件:函数的具体实现和代码运行的测试

从而,更加方便第三方使用

3.1 要实现的目标🫵

我们需要多个接口帮助我们实现:创建(初始化)、一系列具体操作、销毁

具体操作(一切以实现通讯录为目标)包括:头部/尾部插入数据、头部/尾部删除数据、打印出顺序、指定位置插入/删除/查找数据、


3.2 创建(初始化)顺序表🌺

3.2.1 Seqlist.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
//创建动态顺序表
typedef int SLDataType;//方便以后修改数据类型,因为我们不一定每次都需要int类型
typedef struct Seqlist
{
	SLDataType* a;//动态数组
	int size;//有效数据个数
	int capacity;//空间大小
}SL;//重命名顺序表名称,更加简短方便输入

//对顺序表初始化
void SLInit(SL* sl);//初始化的函数声明,注意传址调用--->否则形参只是实参的临时拷贝

3.2.2 Seqlist.c

#include"Seqlist.h"
void SLInit(SL* sl)
{
	sl->a = NULL;
	sl->size = sl->capacity = 0;
}

3.2.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{
	SL sl;
	SLInit(&sl);
}
int main()
{
	SLtest();
	return 0;
}

3.2.4 代码测试


3.3 销毁💥

3.3.1 Seqlist.h

//对顺序表销毁
void SLDestroy(SL* sl);//函数声明

3.3.2 Seqlist.c

注意⚠️

assert(断言)也可以判断sl->a是否是NULL,但是assert比较暴力,会导致程序直接终止,而下面的方法不会影响后面的程序

//对顺序表销毁
void SLDestroy(SL* sl)
{
	if (sl->a)
		free(sl->a);
	sl->a = NULL;
	sl->size = sl->capacity = 0;
}

3.3.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{
	//初始化测试
	SL sl;
	SLInit(&sl);
	//销毁测试
	SLDestroy(&sl);
}

int main()
{
	SLtest();
	return 0;
}

3.3.4 代码测试


3.4 尾部插入数据🌈+打印顺序表

3.4.0 思路分析

由于尾插/头插都需要判断空间够不够,所以我们直接把判断空间十分足够的函数单提出来


对怎样扩容的进一步解释:


3.4.1 Seqlist.h

//打印顺序表
void SLPrint(SL* sl);

//尾部插入数据
void SLPushBack(SL* sl, SLDataType x);

3.4.2 Seqlist.c

//判断空间是否足够
void SLCheckCapacity(SL* sl)
{
	if (sl->size == sl->capacity) 
	{
		//空间不足,扩容2倍
		//判断sl->capacity是否为0
		int newcapacity = sl->capacity == 0 ? 4 : 2 * sl->capacity;//判断原空间是否是0,不是直接*2扩容,是0直接赋值4
		SLDataType* tmp = (SLDataType*)realloc(sl->a, newcapacity * 2 * sizeof(SLDataType));
		//采用中间值tmp接收扩容的新空间--->申请空间也不一定成功,如果我们直接让ps->a接收,
		//但是扩容失败了,那么ps->a的空间直接变成0了
		//所以我们需要判断一下扩容是否成功
		if (tmp == NULL)
		{
			perror("realloc fail!\n");
			return 1;
		}
		sl->a = tmp;
		//sl->capacity *=2;错误--->因为前面我们初始化sl->capacity=0,0*2=0--->报错--->判断一下sl->capacity是否为0
		sl->capacity = newcapacity;//记录现有空间大小
	}
}
//尾部插入数据
void SLPushBack(SL* sl, SLDataType x)
{
	assert(sl);//不能传过来空指针
	SLCheckCapacity(sl);//判断空间是否足够
	//插入数据
	sl->a[sl->size++] = x;
}

//打印顺序表
void SLPrint(SL* sl)
{
	for (int i = 0; i < sl->size; i++)
	{
		printf("%d ", sl->a[i]);
	}
	printf("\n");
}

3.4.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{
	//初始化测试
	SL sl;
	SLInit(&sl);

	//尾插测试
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//打印
	SLPrint(&sl);
	//销毁测试
	SLDestroy(&sl);
}

int main()
{
	SLtest();
	return 0;
}

3.4.4 代码测试


3.5 头部插入数据💫

3.5.0 思路分析

思路和尾插类似,只不过插入数据的位置变了


3.5.1 Seqlist.h

//头部插入数据
void SLPushFront(SL* sl, SLDataType x);

3.5.2 Seqlist.c

//头部插入数据
void SLPushFront(SL* sl, SLDataType x)
{
	assert(sl);
	SLCheckCapacity(sl);//判断空间是否足够
	//插入数据
	for (int i = sl->size - 1; i >=0 ; i--)
	{
		//最后一次进来的是i=0
		sl->a[i + 1] = sl->a[i];
	}
    sl->a[0] = x;
	sl->size++;
}

3.5.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{
	//初始化测试
	SL sl;
	SLInit(&sl);

	//尾插测试
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//打印
	SLPrint(&sl);//1 2 3 4
	//头插测试
	SLPushFront(& sl, 5);
	//打印
	SLPrint(&sl);//5 1 2 3 4
	//销毁测试
	SLDestroy(&sl);
}

int main()
{
	SLtest();
	return 0;
}

3.5.4 代码运行测试


3.6 尾部删除数据⛄️

3.6.0 思路分析


3.6.1 Seqlist.h

//尾部删除数据
void SLPopBack(SL* sl);

3.6.2 Seqlist.c

bool SLIsEmpty(SL* sl)
{
	//判断顺序表是否为空
	assert(sl);
	return sl->size == 0;
}
//尾部删除数据
void SLPopBack(SL* sl)
{
	assert(sl);
	assert(!SLIsEmpty(sl));//顺序表不能为空
	sl->size--;
}

3.6.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{
	//初始化测试
	SL sl;
	SLInit(&sl);

	//尾插测试
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//打印
	SLPrint(&sl);//1 2 3 4
	//头插测试
	SLPushFront(& sl, 5);
	//打印
	SLPrint(&sl);//5 1 2 3 4
	//尾删测试
	//尾部删除数据
	SLPopBack(&sl);
	//打印
	SLPrint(&sl);//5 1 2 3 
	//销毁测试
	SLDestroy(&sl);
}

int main()
{
	SLtest();
	return 0;
}

3.6.4 代码运行测试


3.7 头部删除数据🌊

3.7.0 思路分析

我们需要将后面的数据往前移动一位


3.7.1 Seqlist.h

//头部删除数据
void SLPopFront(SL* sl);

3.7.2 Seqlist.c

//头部删除数据
void SLPopFront(SL* sl)
{
	assert(sl);
	assert(!SLIsEmpty(sl));//顺序表不能为空
	for (int i = 0; i < sl->size-1; i++)
	{
		//最后一次进来的是size-2
		sl->a[i] = sl->a[i + 1];
	}
	sl->size--;
}

3.7.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{
	//初始化测试
	SL sl;
	SLInit(&sl);

	//尾插测试
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//打印
	SLPrint(&sl);//1 2 3 4
	//头插测试
	SLPushFront(& sl, 5);
	//打印
	SLPrint(&sl);//5 1 2 3 4
	//尾删测试
	//尾部删除数据
	SLPopBack(&sl);
	//打印
	SLPrint(&sl);//5 1 2 3 
	//头部删除数据
	SLPopFront(&sl);
	//打印
	SLPrint(&sl);// 1 2 3
	//销毁测试
	SLDestroy(&sl);
}

int main()
{
	SLtest();
	return 0;
}

3.7.4 代码运行测试


3.8 指定位置之前插入数据🍿

3.8.0 思路分析


3.8.1 Seqlist.h

//指定位置之前插入数据
void SLInsert(SL* sl, int pos, SLDataType x);

3.8.2 Seqlist.c

//指定位置之前插入数据
void SLInsert(SL* sl, int pos, SLDataType x)
{
	assert(sl);
	assert(pos >= 0 && pos <= sl->size);//pos确保合法
	SLCheckCapacity(sl);//判断空间是否足够--->是否需要扩容
	for (int i = sl->size - 1; i > pos - 1; i--)
	{
		//最后进来的是pos
		sl->a[i+1] = sl->a[i];
	}
    sl->a[pos]=x;
	sl->size++;
}

3.8.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{
	//初始化测试
	SL sl;
	SLInit(&sl);

	//尾插测试
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//打印
	SLPrint(&sl);//1 2 3 4
	//头插测试
	SLPushFront(& sl, 5);
	//打印
	SLPrint(&sl);//5 1 2 3 4
	//尾删测试
	//尾部删除数据
	SLPopBack(&sl);
	//打印
	SLPrint(&sl);//5 1 2 3 
	//头部删除数据
	SLPopFront(&sl);
	//打印
	SLPrint(&sl);// 1 2 3
	//指定位置之前插入数据
	SLInsert(&sl, 1, 4);
	//打印
	SLPrint(&sl);// 4 1 2 3
	//销毁测试
	SLDestroy(&sl);
}

int main()
{
	SLtest();
	return 0;
}

3.8.4 代码运行测试


3.9 指定位置删除数据⚾️

3.9.0 思路分析


3.9.1 Seqlist.h

//指定位置删除数据
void SLErase(SL* sl, int pos);

3.9.2 Seqlist.c

//指定位置删除数据
void SLErase(SL* sl, int pos)
{
	assert(sl);
	assert(!SLIsEmpty(sl));//顺序表若为空--->不能删除
	assert(pos >= 0 && pos <= sl->size);//pos确保合法
	for (int i = pos; i <sl->size-1 ; i++)
	{
		//最后进来的是size-2
		sl->a[i] = sl->a[i + 1];
	}
	sl->size--;
}

3.9.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{
	//初始化测试
	SL sl;
	SLInit(&sl);

	//尾插测试
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//打印
	SLPrint(&sl);//1 2 3 4
	//头插测试
	SLPushFront(& sl, 5);
	//打印
	SLPrint(&sl);//5 1 2 3 4
	//尾删测试
	//尾部删除数据
	SLPopBack(&sl);
	//打印
	SLPrint(&sl);//5 1 2 3 
	//头部删除数据
	SLPopFront(&sl);
	//打印
	SLPrint(&sl);// 1 2 3
	//指定位置之前插入数据
	SLInsert(&sl,0,4);
	//打印
	SLPrint(&sl);// 4 1 2 3
	//指定位置删除数据
	SLErase(&sl, 2);
	//打印
	SLPrint(&sl);// 4 1 3
	//销毁测试
	SLDestroy(&sl);
}

int main()
{
	SLtest();
	return 0;
}

3.9.4 代码运行测试


4.0 查找数据🍺

4.0.1 Seqlist.h

//查找数据
bool SLFind(SL* sl, SLDataType x);

4.0.2 Seqlist.c

//查找数据
bool SLFind(SL* sl, SLDataType x)
{
	assert(sl);
	for (int i = 0; i < sl->size; i++)
	{
		if (sl->a[i] == x)
			return true;
	}
	return false;
}

4.0.3 test.c

#include"Seqlist.h"
void SLtest()//测试创建的顺序表和初始化的接口
{
	//初始化测试
	SL sl;
	SLInit(&sl);

	//尾插测试
	SLPushBack(&sl, 1);
	SLPushBack(&sl, 2);
	SLPushBack(&sl, 3);
	SLPushBack(&sl, 4);
	//打印
	SLPrint(&sl);//1 2 3 4
	//头插测试
	SLPushFront(& sl, 5);
	//打印
	SLPrint(&sl);//5 1 2 3 4
	//尾删测试
	//尾部删除数据
	SLPopBack(&sl);
	//打印
	SLPrint(&sl);//5 1 2 3 
	//头部删除数据
	SLPopFront(&sl);
	//打印
	SLPrint(&sl);// 1 2 3
	//指定位置之前插入数据
	SLInsert(&sl,0,4);
	//打印
	SLPrint(&sl);// 4 1 2 3
	//指定位置删除数据
	SLErase(&sl, 2);
	//打印
	SLPrint(&sl);// 4 1 3
	//查找数据测试
	bool ret=SLFind(&sl, 3);
	if (ret)
	{
		printf("找到了!\n");
	}
	else
	{
		printf("没找到!\n");
	}
	//销毁测试
	SLDestroy(&sl);
}

int main()
{
	SLtest();
	return 0;
}

4.0.4 代码运行测试


本次的分享到这里就结束了!!!

PS:小江目前只是个新手小白。欢迎大家在评论区讨论哦!有问题也可以讨论的!

如果对你有帮助的话,记得点赞👍+收藏⭐️+关注➕

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

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

相关文章

c++ 学习之多态

来看代码 我们来看看早绑定的代码 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std;class Animal { public:void speak(){cout << "动物在说话 " << endl;} }; class Cat : public Animal { public:void speak() {cout…

android studio检测不到真机

我的情况是&#xff1a; 以前能检测到&#xff0c;有一天我使用无线调试&#xff0c;发现调试有问题&#xff0c;想改为USB调试&#xff0c;但是半天没反应&#xff0c;我就点了手机上的撤销USB调试授权&#xff0c;然后就G了。 解决办法&#xff1a; 我这个情况比较简单&…

LD链接脚本

1.LD链接脚本的简介 LD链接脚本的概念 LD链接器脚本在完整程序编译流程中的链接过程使用。LD链接器脚本定义了程序各个程序段的存储分布&#xff0c;描述链接器如何将这些目标文件.o文件链接成一个输出可执行文件LD链接器脚本与CPU的种类、MCU的内部存储器分布有关。 LD链接…

华为---企业WLAN组网基本配置示例---AC+AP组网

ACAP组网所需的物理条件 1、无线AP---收发无线信号&#xff1b; 2、无线控制器(AC)---用来控制管理多个AP&#xff1b; 3、PoE交换机---能给AP实现网络连接和供电的交换机&#xff1b; 4、授权&#xff1a;默认AC管理的AP数量有限&#xff0c;买授权才能管控更多AP。 WLAN创建…

思维模型 峰终定律

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。 1 峰-终定律的应用 1.1 迪士尼游乐园 迪士尼乐园采用了多种策略来创造令人难忘的体验&#xff0c;从而遵循峰终定律的原则。具体如下&#xff1a; 迪士尼乐园的入口设计和服务体验&…

E047-论坛漏洞分析及利用-针对Wordpress论坛进行信息收集与漏洞扫描的探索

任务实施: E047-论坛漏洞分析及利用-针对Wordpress论坛进行信息收集与漏洞扫描的探索 任务环境说明&#xff1a; 服务器场景&#xff1a;p9_kali-6&#xff08;用户名&#xff1a;root&#xff1b;密码&#xff1a;toor&#xff09; 服务器场景操作系统&#xff1a;Kali Li…

零代码编程:用ChatGPT批量下载谷歌podcast上的播客音频

谷歌podcast有很多播客音频&#xff0c;如何批量下载到电脑呢&#xff1f; 以这个播客为例&#xff1a; https://podcasts.google.com/feed/aHR0cHM6Ly9oYWRhcnNoZW1lc2guY29tL2ZlZWQvcG9kY2FzdC8?saX&ved0CAkQlvsGahcKEwi4uauWsvKBAxUAAAAAHQAAAAAQAg 查看网页源代码&a…

【LeetCode刷题(数据结构与算法)】:二叉树的后序遍历

给你一棵二叉树的根节点root 返回其节点值的后序遍历 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[3,2,1] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1a;root [1] 输出&#xff1a;[1]…

智慧公厕厂家,解读智慧厕所的全面功能应用

近年来&#xff0c;随着城市化进程的加速&#xff0c;智慧公厕的建设与发展成为了城市管理的重要一环。作为城市的门面和城市基础设施的重要组成部分&#xff0c;智慧公厕不仅能够满足人们基本的生理需求&#xff0c;更能提升城市形象和居民生活品质。那么&#xff0c;智慧公厕…

堆专题4 堆排序

题目&#xff1a; 样例&#xff1a; 输入 5 2 8 5 1 3 输出 1 2 3 5 8 思路&#xff1a; 由题意&#xff0c;堆的排序&#xff0c;就是结合向下或向上调整的方式&#xff0c;调整堆顺序&#xff0c;全部的各个部分都变为 顶堆形式。不同的是&#xff0c;由于我们是顶堆原理&a…

学信息系统项目管理师第4版系列28_组织级项目管理和量化项目管理

1. OPM 1.1. 旨在确保组织开展正确项目并合适地分配关键资源 1.1.1. 有助于确保组织的各个层级都了解组织的战略愿景、实现愿景的措施、组织目标以及可交付成果 1.2. 业务评估是建立OPM框架的必要组件 1.3. OPM3 是组织级项目管理成熟度模型&#xff0c;可用于评估组织项目…

华为OD机考算法题:开心消消乐

题目部分 题目开心消消乐难度易题目说明给定一个 N 行 M 列的二维矩阵&#xff0c;矩阵中每个位置的数字取值为 0 或 1&#xff0c;矩阵示例如&#xff1a; 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的 1 进行反转为 0&#xff0c;规则如下&#xff1a; 1) 当点击一…

互联网Java工程师面试题·Java 总结篇·第一弹

目录 1、面向对象的特征有哪些方面&#xff1f; 2、访问修饰符 public,private,protected,以及不写&#xff08;默认&#xff09;时的区别&#xff1f; 3、String 是最基本的数据类型吗&#xff1f; 4、float f3.4;是否正确&#xff1f; 5、short s1 1; s1 s1 1;有错吗…

Deno 下一代JavaScript运行时

目录 1、简介 2、Deno 的特点 3、Deno 和 Node 的区别 4、TypeScript开箱即用 5、内置的基本开发工具 独立可执行文件 测试运行器 代码格式化程序 代码linter 6、专为云而建 7、从浏览器到后端的一致代码 TC39 WinterCG 8、高性能联网 9、数百万个社区模块 10、相关框架 1、简介…

Stream流中的 distinct()方法

去除流中重要的元素。依赖&#xff08;hashCode和equals方法&#xff09; Stream流中无法直接修改集合、数组中的数据 package com.csdn.streampractice; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class StreamTest {public …

初级篇—第八章精讲MySQL数据类型

文章目录 MySQL数据类型常见的属性字符集设置数据库的字符设置表的字符集设置字段的字符集设置 整型数据类型可选属性MUNSIGNEDZEROFILL 如何选择&#xff1f; 浮点类型FLOAT 和 DOUBLE 这两种数据类型的区别是啥呢&#xff1f;为什么浮点数类型的无符号数取值范围&#xff0c;…

使用js获取选中的dom元素 并改变选中(有序dom)的状态

一个效果图&#xff0c;一段代码&#xff0c; 就这样吧。 <template><!-- <el-checkbox v-model"">开启双向</el-checkbox> --><divref"checkListRef"mouseup"mouseupCon"mousedown"mousedownCon"mouseov…

【MySQL】深入了解索引的底层逻辑结构

文章目录 主键排序一. InnoDB的索引结构1. 单个page2. 多个page 二. 为什么选择B树三. 聚簇索引和非聚簇索引结束语 主键排序 我们创建一个user表&#xff0c;并乱序插入数据 mysql> create table if not exists user(-> id int primary key,-> age int not null,-&…

【AI视野·今日NLP 自然语言处理论文速览 第五十四期】Fri, 13 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 13 Oct 2023 Totally 75 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Tree-Planner: Efficient Close-loop Task Planning with Large Language Models Authors Mengkang Hu, Yao M…

比特听命:补码的产生过程与整数在计算机中的存储

文章目录 参考环境声明八位二进制加法器八进制数值 原码概念正负数与零正数与负数的运算 反码概念一步之遥 补码概念唯一的零加法运算 补码的优缺点优点简化算术运算一眼辨别正负性运算过程中无需对符号位进行处理 缺点不易阅读 参考 项目描述搜索引擎Bing、GoogleAI 大模型文…