C++ 入门算法,你必须懂的“顺序表”

2023-11-03

顺序表简介:
顺序表是简单的一种线性结构,他们可以说是连续存储元素的,也可以称之为数组。顺序表可以快速定位到第几个元素的位置,中间不允许有空值。插入、删除时需要移动大量的元素!

顺序表的三个要素:

  1. 用elems记录存储位置的基地址;
  2. 分配一段连续的存储空间size;
  3. 用length记录实际的元素个数,即顺序表的长度。
    在这里插入图片描述

顺序表的结构体定义

#define MAX_SIZE 100

struct SEQUENCE {
int *elems; // 存储整型的顺序表的基地址
int length; // 顺序表的长度
int size; // 顺序表的总空间大小
}


顺序表的定义与初始化
#define MAX_SIZE 100

// 定义
struct SEQUENCE {
	int* memory;	// 首地址
	int length;		// 大小/元素个数
	int size;		// 内存大小
};

// 初始化
bool initSEQUENCE(struct SEQUENCE& L) {
	L.memory = new int[MAX_SIZE];		// 分配内存
	if (!L.memory) {					// 判断是否分配失败
		return false;
	}

	L.length = 0;						// 空表长度为0
	L.size = MAX_SIZE;					// 顺序表的总空间大小
	return true;
}

如下图:
在这里插入图片描述
初始化只是给顺序表分配内存大小!


尾部插入数据
// 尾部插入数据
bool insertSEQUENCE(struct SEQUENCE& L, int e) {	// 参数一:顺序表的引用; 参数二:需要插入的元素
	if (L.length == L.size) return false;			// 合法性检查,如果顺序表已满,则无法插入

	L.memory[L.length] = e;							// 将元素插入下标为length的位置
	L.length++;										// 顺序表的长度加1

	return true;
}

如下图:
在这里插入图片描述
在尾部插入元素,只需要将该元素赋值给length下标,并将length++即可。


中间插入数据
// 中间插入数据
bool insert(struct SEQUENCE& L, int i, int e) {	// 参数一:顺序表的引用;参数二:插入位置(下标);参数三:插入元素
	if (i < 0 || i >= L.length) return false;	// 合法性检查,中间插入元素,插入位置i不可能大于等当前元素的长度length
	if (L.length == L.size) return false;		// 合法性检查,如果顺序表已满,则无法插入

	for (int j = L.length - 1; j >= i; j--) {	// 把元素都往后移动一个位置,直到遇到插入位置为止
		L.memory[j+1] = L.memory[j];
	}
	L.memory[i] = e;							// 赋值需要插入的元素到下标i的位置
	L.length++;									// 顺序表的长度加1

	return true;
}

如下图:
在这里插入图片描述
中间插入一个元素,需要将插入位置的后面所有元素都往后移动一个位置,然后再插入。


元素删除
// 元素删除
bool deleteSEQUENCE(struct SEQUENCE& L, int i) {	// 参数一:顺序表的引用;参数二:删除位置(下标)
	if (i < 0 || i >= L.length) return false;		// 合法性检查,删除的元素,位置(下标)i不可能大于等当前元素的长度length
	
	if (i == L.length - 1) {						// 删除最后一个元素
		L.length--;									// 只需要将length长度减一即可
		return true;
	}

	for (int j = i; j < L.length - 1; j++) {		// 删除中间某个元素
		L.memory[j] = L.memory[j + 1];				// 删除位置的后续元素往前移
	}
	L.length--;										// length长度减一

	return true;
}

如下图:
在这里插入图片描述
删除某个元素,只需将其后面所有的元素都往前移动一个位置,将其覆盖掉,最后将length减一即可。


顺序表销毁

当程序要结束时,也是需要将顺序表的内存释放掉,应为他的内存是从堆上分配的!

// 释放顺序表中分配的内存
void Delete(struct SEQUENCE& L) {	// 参数一:顺序表的引用
	if (L.memory) {					// 判断指针是否有内存,有,则释放;无,则跳过
		delete[] L.memory;
		L.length = 0;				// 记得也要讲长度设为0
	}
}

如下图:
在这里插入图片描述


打印顺序表的结果

根据项目的实际情况定夺。

// 打印输出结果
void print(struct SEQUENCE& L) {
	cout << "顺序表的长度为:" << L.length << ", 内存大小为:" << L.size << endl;

	for (int i = 0; i < L.length; i++) {
		cout << L.memory[i] << ", ";
	}
	cout << endl;
}

测试代码:

#include <iostream>
#include <Windows.h>

using namespace std;

#define MAX_SIZE 100

struct SEQUENCE {
	int* memory;	// 首地址
	int length;		// 大小/元素个数
	int size;		// 内存大小
};

// 初始化
bool initSEQUENCE(struct SEQUENCE& L) {
	L.memory = new int[MAX_SIZE];		// 分配内存
	if (!L.memory) {					// 判断是否分配失败
		return false;
	}

	L.length = 0;						// 空表长度为0
	L.size = MAX_SIZE;					// 顺序表的总空间大小
	return true;
}

// 尾部插入数据
bool insertSEQUENCE(struct SEQUENCE& L, int e) {	// 参数一:顺序表的引用; 参数二:需要插入的元素
	if (L.length == L.size) return false;			// 合法性检查,如果顺序表已满,则无法插入

	L.memory[L.length] = e;							// 将元素插入下标为length的位置
	L.length++;										// 顺序表的长度加1

	return true;
}

// 中间插入数据
bool insert(struct SEQUENCE& L, int i, int e) {	// 参数一:顺序表的引用;参数二:插入位置(下标);参数三:插入元素
	if (i < 0 || i >= L.length) return false;	// 合法性检查,中间插入元素,插入位置i不可能大于等当前元素的长度length
	if (L.length == L.size) return false;		// 合法性检查,如果顺序表已满,则无法插入

	for (int j = L.length - 1; j >= i; j--) {	// 把元素都往后移动一个位置,直到遇到插入位置为止
		L.memory[j+1] = L.memory[j];
	}
	L.memory[i] = e;							// 赋值需要插入的元素到下标i的位置
	L.length++;									// 顺序表的长度加1

	return true;
}

// 元素删除
bool deleteSEQUENCE(struct SEQUENCE& L, int i) {	// 参数一:顺序表的引用;参数二:删除位置(下标)
	if (i < 0 || i >= L.length) return false;		// 合法性检查,删除的元素,位置(下标)i不可能大于等当前元素的长度length
	
	if (i == L.length - 1) {						// 删除最后一个元素
		L.length--;									// 只需要将length长度减一即可
		return true;
	}

	for (int j = i; j < L.length - 1; j++) {		// 删除中间某个元素
		L.memory[j] = L.memory[j + 1];				// 删除位置的后续元素往前移
	}
	L.length--;										// length长度减一

	return true;
}

// 释放顺序表中分配的内存
void Delete(struct SEQUENCE& L) {	// 参数一:顺序表的引用
	if (L.memory) {					// 判断指针是否有内存,有,则释放;无,则跳过
		delete[] L.memory;
		L.length = 0;				// 记得也要讲长度设为0
	}
}

// 打印输出结果
void print(struct SEQUENCE& L) {
	cout << "顺序表的长度为:" << L.length << ", 内存大小为:" << L.size << endl;

	for (int i = 0; i < L.length; i++) {
		cout << L.memory[i] << ", ";
	}
	cout << endl;
}

int main(void) {
	struct SEQUENCE sequence;

	// 初始化
	cout << "正在初始化顺序表。。。" << endl;
	if (initSEQUENCE(sequence)) {
		cout << "顺序表初始化成功!" << endl;

	} else {
		cout << "顺序表初始化失败!" << endl;
		return -1;
	}

	// 尾部插入元素
	for (int i = 0; i < 5; i++) {
		if (insertSEQUENCE(sequence, i)) {
			cout << "插入成功!" << endl;
		} else {
			cout << "插入失败!" << endl;
		}
	}

	print(sequence);

	// 中间插入元素
	if (insert(sequence, 4, 10)) {
		cout << "插入成功!" << endl;

	} else {
		cout << "插入失败!" << endl;
	}

	print(sequence);

	// 删除元素
	if (deleteSEQUENCE(sequence, 5)) {
		cout << "删除成功!" << endl;

	} else {
		cout << "删除失败!" << endl;
	}

	print(sequence);

	// 销毁顺序表
	Delete(sequence);

	print(sequence);

	system("pause");
	return 0;
}

运行截图:
在这里插入图片描述


顺序表项目实战

使用顺序表实现浪漫星空,且星星慢慢移动退出屏幕。

效果:
在这里插入图片描述

下面是实现代码:

star.h头文件

#pragma once

#ifndef _STAR_H_
#define _STAR_H_

#define WINDOWS_X  840
#define	WINDOWS_Y  600
#define STAR_SCORE 100		// 星星个数
#define RADII	   3		// 随机半径
#define COLOUR	   6		// 颜色系数

enum STATE {
	PAUSE,	// 
	UP,		// 上
	DOWN,	// 下
	LEFT,	// 左
	RIGHT,	// 右
	CONST,	// 个数
};

struct STAR {
	int starX;
	int starY;
	int radii;	// 半径
	int colour;	// 颜色
	int step;	// 颜色系数和跳跃间隔
	STATE state;	// 星星状态
};

struct SEQUENCE {
	struct STAR* memory;	// 首地址
	int length;				// 大小/元素个数
	int size;				// 内存大小
};


// 顺序表的接口
bool initSEQUENCE(struct SEQUENCE& L);
bool insertSEQUENCE(struct SEQUENCE& L, struct STAR e);
bool deleteSEQUENCE(struct SEQUENCE& L, int i);
void Delete(struct SEQUENCE& L);
void print(struct SEQUENCE& L);

#endif

实现结构体接口:starSEQUENCE.cpp

#include <iostream>
#include "star.h"

using namespace std;

// 初始化
bool initSEQUENCE(struct SEQUENCE& L) {
	L.memory = new struct STAR[STAR_SCORE];
	if (!L.memory) {
		return false;
	}

	L.length = 0;
	L.size = STAR_SCORE;
	return true;
}

// 尾部插入数据
bool insertSEQUENCE(struct SEQUENCE& L, struct STAR e) {
	if (L.length == L.size) return false;

	L.memory[L.length] = e;
	L.length++;

	return true;
}


// 元素删除
bool deleteSEQUENCE(struct SEQUENCE& L, int i) {
	if (i < 0 || i >= L.length) return false;

	if (i == L.length - 1) {	// 删除最后一个元素
		L.length--;
		return true;
	}

	for (int j = i; j < L.length - 1; j++) {	// 删除中间某个元素
		L.memory[j] = L.memory[j + 1];	// 删除位置的后续元素往前移
	}
	L.length--;

	return true;
}

void Delete(struct SEQUENCE& L) {
	if (L.memory) {
		delete[] L.memory;
		L.length = 0;
	}
}

// 打印输出结果
void print(struct SEQUENCE& L) {
	cout << "顺序表的长度为:" << L.length << ", 内存大小为:" << L.size << endl;

	for (int i = 0; i < L.length; i++) {
		cout << "第" << i + 1 << "颗星星: x = " << L.memory[i].starX << ", y = " << L.memory[i].starY <<
			"半径 = " << L.memory[i].radii << endl;
	}
	cout << endl;
}

mian函数实现

#include <graphics.h>
#include <iostream>
#include <Windows.h>
#include <cstdlib>
#include <ctime>
#include "star.h"

using namespace std;


// 星星的初始化
void initStar(struct STAR &_star) {
	int rgb = 0;


	_star.state = UP;
	_star.starX = rand() % WINDOWS_X;			// 0 - 839
	_star.starY = rand() % (WINDOWS_Y - 100);	// 0 - 499 
	_star.radii = rand() % RADII + 1;			// 0 - 3

	_star.step = rand() % COLOUR + 1;
	rgb = 255 * _star.step / COLOUR;
	
	_star.colour = RGB(rgb, rgb, rgb);
}

// 星星移动
void moveStar(struct SEQUENCE &star, int i) {

	if (star.memory[i].state == PAUSE) return;

	setfillcolor(RGB(0, 0, 0));		// 将星星擦除掉
	solidcircle(star.memory[i].starX, star.memory[i].starY, star.memory[i].radii);

	if (star.memory[i].state == UP) {
		star.memory[i].starY -= star.memory[i].step;
		if (star.memory[i].starY < 0) deleteSEQUENCE(star, i);	// 判断如果星星超出范围,便删除

	} else if (star.memory[i].state == DOWN) {
		star.memory[i].starY += star.memory[i].step;
		if (star.memory[i].starY > WINDOWS_Y) deleteSEQUENCE(star, i);	// 判断如果星星超出范围,便删除

	} else if (star.memory[i].state == LEFT) {
		star.memory[i].starX -= star.memory[i].step;
		if (star.memory[i].starX < 0) deleteSEQUENCE(star, i);	// 判断如果星星超出范围,便删除

	} else if (star.memory[i].state == RIGHT) {
		star.memory[i].starX += star.memory[i].step;
		if (star.memory[i].starX < WINDOWS_X) deleteSEQUENCE(star, i);	// 判断如果星星超出范围,便删除
	}


	setfillcolor(star.memory[i].colour);	// 将星星画上去
	solidcircle(star.memory[i].starX, star.memory[i].starY, star.memory[i].radii);
}


int main(void) {
	struct SEQUENCE star;
	struct STAR _star;

	// 初始化星星在顺序标中保存
	initSEQUENCE(star);

	initgraph(WINDOWS_X, WINDOWS_Y);

	srand((unsigned int)time(NULL));

	// 星星的初始化
	for (int i = 0; i < STAR_SCORE; i++) {
		initStar(_star);
		insertSEQUENCE(star, _star);
	}

	// 画星星
	for (int i = 0; i < star.length; i++) {
		setfillcolor(star.memory[i].colour);
		solidcircle(star.memory[i].starX, star.memory[i].starY, star.memory[i].radii);
	}

	//system("pause");
	while (1) {
		// 星星移动
		for (int i = 0; i < star.length; i++) {
			moveStar(star, i);
		}	

		if (star.length == 0) {
			break;
		}
		Sleep(50);
	}

	system("pause");

	closegraph();
	return 0;
}

顺序表总结:
顺序表可以说是一个数组,但是他比数组还要灵活。实现顺序表是使用结构体,顺序表的各种操作都是使用函数接口完成的。只需要设计好函数接口,顺序表还是很有用的!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 入门算法,你必须懂的“顺序表” 的相关文章

  • 创建文件并使用内存流保存到其中

    如何创建文件并使用内存流写入文件 我需要使用内存流来防止其他线程尝试访问该文件 我试图保存到文件的数据是 html 如何才能做到这一点 假设您的意思是如何将文件的内容复制到内存流 如果您使用的是框架4 var memoryStream ne
  • 在 TPL Dataflow 中,是否可以在创建块之后但使用之前更改 DataflowBlockOptions?

    有效果吗 我想推迟设置 ExecutionDataflowBlockOptions SingleProducerConstrained 属性 直到我准备好将网络链接在一起 因为 我想将创建块及其语义与将网络及其语义链接在一起分开 但据我所知
  • 进入嵌入式[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何设置 web.config 文件以显示完整的错误消息

    我在 Windows Azure 上部署了 MVC 3 应用程序 但现在当我通过请求时staging url它告诉我 很抱歉 在执行您的要求时发生了一个错误 现在我想查看完整的错误消息 默认情况下由于某些安全原因它会隐藏该消息 我知道我们可
  • 如何有效地测试action是否用属性(AuthorizeAttribute)修饰?

    我正在使用 MVC 并且有一种情况OnActionExecuting 我需要确定即将执行的Action方法是否用属性修饰 AuthorizeAttribute尤其 我不是问授权是否成功 失败 而是问该方法是否需要授权 对于非 MVC 人员
  • 不要覆盖 Azure Blob 存储

    我有一种将文件添加到 Azure Blob 存储的方法 问题是我试图指定一个条件 在该条件下它不会覆盖 blob 而只是添加到其中 我正在尝试使用参数访问条件 但是 VS 说这个方法不能采用两个参数 async void archiveNe
  • C++ 中的反向迭代器和负跨步迭代器,在开始之前使用一个作为哨兵

    In 查看 C 反向迭代器的另一种方式 https devblogs microsoft com oldnewthing 20211112 00 p 105908雷蒙德 陈写道 C 语言的一个怪癖 你可以拥有一个指针 集合的 已过终点 但不
  • 从 C# 访问 COM vtable

    C 中有没有办法访问 COM 对象的虚拟方法表以获取函数的地址 经过大量搜索和拼凑不同的部分解决方案后 我弄清楚了如何做到这一点 首先 您需要为您尝试访问的对象定义 COM 组件类 ComImport Guid InterfaceType
  • Image.FromStream() 方法返回 Invalid Argument 异常

    我正在从智能相机成像器捕获图像 并通过套接字编程从相机接收字节数组 NET 应用程序是客户端 相机是服务器 问题是我在运行时收到 System InvalidArgument 异常 private Image byteArrayToImag
  • std::istringstream >> 使奇怪的行为加倍

    下面的代码打印0在 mac osx 上使用 clang 其他地方都会打印5 clang https ideone com mVgpzS gcc https ideone com oZ0hy6 include
  • C#:如何确定坐标是否在美国大陆?

    我正在获取坐标 纬度 经度 我想检查这些坐标是否位于美国大陆 有没有一种简单的方法可以在 C 中实现 我可以将坐标转换为 MGRS 或 UTM 谢谢 哇哦 他们专门为你准备了 http econym org uk gmap states x
  • 安全移动 C++ 对象

    我听到过一些警告 不要通过以下方式将对象运送到另一个内存位置memcpy 但不知道具体原因 除非它包含的成员做了依赖于内存位置的棘手事情 否则这应该是完全安全的 或者不是 编辑 预期的用例是像这样的数据结构vector 它存储对象 不是po
  • 使用 itextSharp 5.3.3 对 Pdf 文档进行数字签名和验证

    我正在尝试使用 iTextSharp 5 3 3 在服务器 c 上进行数字签名和验证 pdf 文档 我使用 DigiSign 在线工具 生成了 Pfx 文件 然后使用 Windows 生成证书 cer 文件
  • 如何声明返回相同类型的 Func Delegate 的 Func Delegate?

    我想编写一个方法 该方法可以完成一些工作 并最终返回另一个与原始方法具有相同签名的方法 这个想法是根据前一个字节值顺序处理字节流 而不进行递归 通过这样调用它 MyDelegate executeMethod handleFirstByte
  • 更改为通用接口对性能的影响

    我使用 Visual Studio 使用 C NET 开发应用程序 ReSharper 在我的方法原型中经常建议我用更通用的类型替换输入参数的类型 例如 如果我仅在方法主体中使用带有 foreach 的列表 则使用 List 和 IEnum
  • IOS Box2D - 身体遵循基于速度波动的点数组的特定路径

    我有一个关于身体的问题 它遵循特定的路径 首先是将身体移动到目标点的方法 const float destinationControl 0 3f b2Vec2 targetPosition path counter b2Vec2 missi
  • 在另一个类中使用一个类对象?

    我正在用 c 制作应用程序 在该应用程序中 我有一个类DataCapture cs 在同一个应用程序中 我有另一个类Listner cs 在 Listner cs 类中 我想使用以下对象DataCapture cs不创建新对象DataCap
  • 使用智能指针在大型对象集合中创建多个索引

    我正在为一个大型对象集合创建多个索引 即使用不同的键 对象可以改变 集合可以缩小和增长 到目前为止我的想法 保留某种指向对象的指针的多个集合 使用set代替map以获得更好的封装 使用 unordered set 可以很好地扩展大型数据集
  • 以编程方式将 UserControl 从 ContentControl 移动到另一个 ContentControl

    在 WPF 应用程序中 我想在代码中将 UserControl 从 ContentControl 移动到另一个控件 myContentControl2 Content myUserControl 在这种情况下我得到一个错误 指定的元素已经是
  • 我的 C 程序无法运行,并显示“无法执行二进制文件:Exec 格式错误”

    我刚刚从 C 开始 我试图编译下面的代码并执行它 但出现错误 也在运行sizeBS 或数据堆栈中没有显示任何内容 include

随机推荐

  • Neo4j 快速入门

    Neo4j 快速入门 neo4j 官方文档 https neo4j com docs neo4j 中文社区 http neo4j com cn neo4j 开发者页面 https neo4j com developer Neo4j安装 a
  • 计算机键盘正确指法,键盘指法,详细教您盲打及快速打字指法练习的步骤

    有些人在用电脑打字的时候 会打的特别快 最快的时候能够一分钟打上八九十个字 而这样的打字速度也是靠平时的练就打字功力得来的 那么键盘指法打字如何才能将字打的准备又快呢 别着急 小编现在就来给你们普及一下这方面的知识 学会正确的键盘指法打字
  • 1.2 编程语言选择

    1 2 编程语言和城市选择 商业网站开发课 编程语言选择 后端开发语言 特点 排名网站 https hellogithub com report tiobe 薪资 参考2022年智联招聘 深圳初级和中级薪资 通用技能 操作系统 Linux
  • 在网络安全解决方案中使用数据挖掘技术

    网络安全 英语 network security 包含网络设备安全 网络信息安全 网络软件安全 黑客通过基于网络的入侵来达到窃取敏感信息的目的 也有人以基于网络的攻击见长 被人收买通过网络来攻击商业竞争对手企业 造成网络企业无法正常营运 网
  • 【ChatGPT实战案例】Excel代码太多记不住怎么办?ChatGPT来帮你高效解决问题

    目录 适合人群 使用工具 制作步骤 示例1 Excel数据分列 示例2 Excel数据提取 适合人群 会Excel基本操作 但是不懂Excel公式编写的人 使用工具 内容生产工具 如ChatGPT 讯飞星火认知模型 文心一言等 EXCEL文
  • LeetCode1748. 唯一元素的和(python)

    题目 给你一个整数数组 nums 数组中唯一元素是那些只出现 恰好一次 的元素 请你返回 nums 中唯一元素的 和 示例 1 输入 nums 1 2 3 2 输出 4 解释 唯一元素为 1 3 和为 4 示例 2 输入 nums 1 1
  • VCF变异文件读取和详细

    下载了千人基因组variants数据 是 vcf gz和 vcf gz tbi文件格式 需要在linux上打开 此时我还是一个生信小菜鸡 记录一下vcf文件读取和详细解释 在服务器先解压再打开 gunzip 文件 vcf gz cat 文件
  • 弹性盒模型学习

    一 弹性盒布局 1 弹性盒布局的容器指的是采用了弹性布局的DOM元素 而弹性布局的条目指的是容器中包含的子DOM元素 最外围的边框表示的是容器 而编号1和2的边框表示的是容器中的条目 弹性盒布局中有两个相互垂直的坐标轴 一个是主轴 另一个称
  • 【UE虚幻引擎】UE源码版编译、Andorid配置、打包

    首先是要下载源码版的UE 我这里下载的是5 2 1 首先要安装Git 在你准备放代码的文件夹下右键点击Git Bash Here 然后可以直接git clone https github com EpicGames UnrealEngine
  • 51单片机播放音乐(一):蜂鸣器

    51单片机播放音乐 一 蜂鸣器 原理 蜂鸣器 乐谱转成循环次数 单片机代码 仿真电路图 本文完整源码 原理 蜂鸣器 蜂鸣器分为有 震动 源的和无源的 有源的无法控制频率 所以用无源的才能播放音乐 无源蜂鸣器需要自己控制输入变化的信号才能发声
  • Rstudio MarkDown使用教程

    认识MarkDown MarkDown是一种轻量级的 标记语言 它的优点很多 目前也被越来越多的写作爱好者 撰稿者广泛使用 Markdown 的语法十分简单 常用的标记符号也不超过十个 对于大学里掌握了多门语言的我们来说 这种不需要思维 仅
  • R语言—如何下载和使用包

    R语言中有非常多的包 每个包都具有不同的功能 因此 在正式的R语言学习之前 需要学会如何下载和安装R的包 以此进行下一步学习 install packages 安装 1 打开RStudio软件 在RStudio中输入代码install pa
  • 实现增删查改

    核心代码 增 myModel Table1 Add data 删 myModel Table1 Remove data 查 var data myModel Table1 ToList 改 myModel Entry data State
  • js 随机获取数组几个内容

    function getRandomArrayElements arr count var shuffled arr slice 0 i arr length min i count temp index while i gt min in
  • HTML <textarea> 标签

    实例
  • C++设计模式——观察者模式

    观察者模式 Observer 观察者模式是目前应用最广 影响范围最大的模式之一 因为 Observer 的一个实例Model View Control MVC 结构在系统开发架构设计中有着很重要的地位和意义 MVC实现了业务逻辑和表示层的解
  • 羞愧的“码龄3年”开篇之作

    打开账号发现码龄已经三年了 已经忘记了是什么情况之下注册了账号 怎能让账号下空空如也 先来个开篇之作留个痕迹 源于前两天学习了一下脚本语言 今天做一个内容回顾记录一下 以下是学习过程中有些不懂得地方查了各个博客后的整体总结 只针对于个人的只
  • Hadoop集群配置——1

    参考 Python Spark 2 0 Hadoop机器学习与大数据实战 林大贵 著 清华大学出版社 一 Hadoop集群 Hadoop集群需要4台服务器才可以建立 可以进行并行处理 所以在虚拟机上创建了master data1 data3
  • Android Studio Electric Eel提示Gradle插件报错问题的解决方法

    新建一个工程 执行Sync gradle files报错 提示Gradle plugin找不到或者运行库版本不兼容 会有不同的错误提示 摘录部分错误提示如下 解决方法 需要使用JDK 11编译工程 设置步骤 File gt Project
  • C++ 入门算法,你必须懂的“顺序表”

    顺序表简介 顺序表是简单的一种线性结构 他们可以说是连续存储元素的 也可以称之为数组 顺序表可以快速定位到第几个元素的位置 中间不允许有空值 插入 删除时需要移动大量的元素 顺序表的三个要素 用elems记录存储位置的基地址 分配一段连续的