数组

c++(线性结构的处理)

喜欢而已 提交于 2020-04-03 14:30:14
我们知道,在内存中的空间都是连续的。也就是说,0x00000001下面的地址必然是0x00000002。所以,空间上是不会出现地址的突变的。那什么数据结构类型是连续内部空间呢,其实就是数组,当然也可以是堆。数组有很多优势,它可以在一段连续空间内保存相同类型的数据,并且对这些数据进行管理。所以从这个意义上说,掌握了数组才能说明你数据结构入门了。 那么,在实际开发中,我们对线性结构应该注意些什么呢?我个人的观点: (1)数组的资源是有限的,必须确定资源的范围 (2)数组中资源的申请和释放必须一一对应,否则很容易造成资源泄漏的现象 (3)数组中的注意事项同样应用于堆分配的连续内存资源空间中 下面是自己设计的一个int分配的小程序,大家可以一起尝试一下: a)设计内存节点的数据形式 typedef struct _DATA_NODE { int* pData; char* pFlag; int num; }DATA_NODE; #define STATUS int #define TRUE 1 #define FALSE 0 b)创建内存节点 DATA_NODE* malloc_node(int number) { DATA_NODE* pDataNode = NULL; if(0 == number) return NULL; pDataNode = (DATA_NODE*)

队列之顺序存储实现

纵然是瞬间 提交于 2020-04-03 14:21:24
队列 特点:FIFO,先入先出,插入删除在两段进行(入队出队) 操作: 生成。 判断未满 判断非空 入队 出队 数组实现 一个一维数组 记录头元素位置变量front 记录尾元素位置变量rear 开始时front和rear都是-1。 循环队列 使用求余实现循环 线性数组的问题: 在一个固定长度的数组内,先不断入队直到填满数组,再几次出队。此时rear指向最大位置,数组中仍然有空间,但是却无法再插入元素。 出现一个问题: 若用front=rear表示队列为空,队列满时也会出现front=rear的问题。 出现原因:我们用front和rear的距离来表示情况,距离一共有n种情况,而队列一共有n+1中情况(包括队列为空)。我们无法用n种表示方法来表示n+1种情况。 解决方法: 使用额外标记:Size或者tag域,size记录元素个数,tag记录最后一次操作。 仅使用n-1个数组空间 实现代码 此处采用front==rear表示非空 此处采用(rear+1)%maxsize==front表示已满,即队列只存储n-1个元素,rear+1对maxsize取余等于front时一个位置时队列已满。 初始化 建立队列结构体,包括一个头指针,尾指针,最大容量和一个指向数组首地址的指针。 typedef int Position; struct QNode { ElementType *Data; /*

数组那些不为菜鸟所知的秘密(一)

﹥>﹥吖頭↗ 提交于 2020-04-03 06:56:36
数组不为菜鸟所知的秘密 #include<iostream> using namespace std; //数组指针与指针数组 /* int(*p)[5]数组指针本质是指针,指向元素个数为5的数组 int *p[5]指针数组本质是数组因为[]的优先级比*高p先和[]结合 */ int main1() { char a[5] = { 'A', 'B', 'C', 'D' }; char(*p1)[5] = &a; cout << p1 << endl;//02FFA54 cout << p1 + 1 << endl;//02FFA59 //char(*p2)[10] = &a;//error C2440: “初始化”: 无法从“char (*)[5]”转换为“char (*)[10] //char(*p2)[3] = &a;// error C2440 : “初始化” : 无法从“char(*)[5]”转换为“char(*)[3] //char(*p2)[5] = a;出错 //&a代表整个数组的首地址,a代表数组首元素的首地址 system("pause"); return 0; } int main2() { struct Test { int Num; char *pcName; short sDate; char cha[2]; short sBa[4]; }; Test

C++字符串使用整理

巧了我就是萌 提交于 2020-04-03 04:25:45
1.字符类型 用char定义,可以是单个变量或数组,与整形区别是有" ' ' ". 在字符数组中若无'\0'输入,系统会有'\0'自动补充 2.输入 用cin和cin.getline输入 cin:输入时遇到'\b'停止输入; cin.getline可以输入空格,也可设置遇到特殊字符时停止输入,如cin.getline(数组名,输入个数,需要遇到停止的特殊字符) 3.输出 cout可实现单个和数组的输出,但在数组输出时需要一个一个输出。 4.字符串处理函数 在使用字符函数前,需包含string.h文件 有strlen求字符串长度,字符串复制函数strcpy,字符串连接函数strcat,字符串比较函数strcmp,大写字母变成小写字符函数strlwr,小写字母变成大写字母函数strupr,将第二个数组中前n个元素复制到第一个数组中的strncpy函数,比较两个字符数组前n个字符函数strncmp。 来源: https://www.cnblogs.com/wwywy/p/10806986.html

PHP获取文件的扩展名

与世无争的帅哥 提交于 2020-04-02 20:12:04
<?php $url = 'dir/upload.image.jpg'; function getExt1($url){ return strrchr($url,'.'); } function getExt2($url){ return substr($url,strrpos($url,'.')); } function getExt3($url){ $a = explode('.',$url); return array_pop($a); } function getExt4($url){ $p = pathinfo($url); return $p['extension']; } function getExt5($url){ return strrev(substr(strrev($url), 0, strpos(strrev($url), '.'))); } $s = getExt5($url); echo $s; ?>    注:1、strrchr() - 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。否则返回false。   2、array_pop():删除数组中的最后一个元素。返回值:返回数组的最后一个值。如果数组是空的,或者非数组,将返回 NULL。   3、pathinfo() 返回一个关联数组包含有 path 的信息。

最大子数组和问题

好久不见. 提交于 2020-04-02 19:27:09
题目描述:最大子数组和问题 1.元素个数不超过100个,存储在文本文件中。 2.元素具有首尾相接特点。 3.输出结果:   (1)求出的最大子数组和   (2)该字数组在原数组中的位置(起始下标和结束下标) 代码如下: package com.company; import java.io.*; import java.util.Scanner; public class A { public static int[] method01(File file){ System.out.println("请输入少于100个数:"); Scanner sc = new Scanner(System.in); String str = sc.next().toString();//输入字符串 例如输入:1,-5,9,-2,3 String[] s = str.split(",");//以符号“,”为分割线,将分割后的内容一次存入字符数组s中 例如:此时字符串数组s中的内容为:{"1","-5","9","-2","3"},字符串数组长度为5 int[] array = new int[s.length];//生成一个与字符数组同等长度的整型数组,用于存储将字符串转换为整型的内容 if(s.length >= 100){ System.out.println("你输入的数多于100个!");

LeetCode 289. 生命游戏

一世执手 提交于 2020-04-02 18:30:16
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 289. 生命游戏 题目 根据 百度百科 , 生命游戏 ,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律: 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡; 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活; 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡; 如果死细胞周围正好有三个活细胞,则该位置死细胞复活; 根据当前状态,写一个函数来计算面板上所有细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。 示例: 输入: [ [0,1,0], [0,0,1], [1,1,1], [0,0,0] ] 输出: [ [0,0,0], [1,0,1], [0,1,1],

1.6 C之 数组

我怕爱的太早我们不能终老 提交于 2020-04-02 15:42:09
数组 1、为什么需要数组? 数组就是数组成一个组,数组就是一个特定数据类型的变量。 2、如何定义数组? int(数组类型) a[x] ; 数组中元素类型 数组名[数组元素个数] 3、怎么使用数组? 数组定义的时候作为整体定义。但是使用的时候不能作为整体使用,使用时必须拆开使用数组中的各个元素。 譬如:int a[4],使用其中的四个元素,分别用a[0]......a[3],其中[]是数组的标志,[]中的数字叫做数组的下标(index 索引),下表是我们访问各个元素的指引,下表是0,代表数组第一个元素,下表是1,代表数组中的第二个元素。 总结 :数组中的所有元素必须是同一个数据类型,不可能在同一个数组中存储两种数据类型的数。 4、数组的初始化问题 初始化(initinalize,简写为 init),是为了让对象有一个预定的初始状态。 当一个局部变量没有初始化时,他的值是随机的。如果没有注意这个,可能会导致程序出错。解决方案有两个: 第一个,在定义过后明确给他赋值,使用=运算符。 第二个,定义该变量,同时进行初始化。 总结: 1、一般来讲,写代码的同时显示赋值,则两种方式并无优劣差异。但是人会犯错误,所以定义的同时初始化好一点,因为这个定义时候就有了固定值,即便之后忘记显示赋值也不会在成结果是随机的。 2、 一般情况下,定义的同时都将变量初始化为0.局部变量定义同时初始化为0

R语言学习笔记——数据结构 & 数据框基本操作

随声附和 提交于 2020-04-02 07:19:08
参考书籍:R语言实战 数据结构: 1. 向量 : 用于存储数值型、字符型或逻辑型数据的一维数组   1.1 创建 : a <- c(1, 2, 3, 4)   1.2 访问 : a[1] : 1        a[c(2, 4)] : 2 4 (向量a中的第二 个和第四个元素)        a[1:4] : 1 2 3 4 (向量a中的第一个直到第四个元素)   1.3 注意 :       1) 单个向量中的数据必须拥有 相同的类型或模式 (数值型、字符型或逻辑型)       2) 标量是只含一个元素的向量,例如f <- 3 、 g <- "US" 和h <- TRUE。它们用于保存常量 2. 矩阵 : 矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)   2.1 创建 : mymatrix <- matrix(vector, nrow=number_of_row, ncol=number_of_col, byrow=logical_value, dimnames=list(char_vector_rownames,                   char_vector_colnames))        其中vector包含了矩阵的元素, nrow和ncol用以指定行和列的维数, dimnames包含了可选的、以字符型向量表示的行名和列名

java集合之Map接口

时光怂恿深爱的人放手 提交于 2020-04-02 05:12:51
一、Map的实现类大概结构: ---Map:双列数据,存储key-value对的数据(类似于高中的函数)   ---HashMap:作为Map的主要实现类;线程不安全,效率高。可以存储null的key和value     ---LinkedHashMap:作为HashMap的子类,保证在遍历map元素时,可以按照添加的顺序实现遍历。因为它在原有的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个。对于频繁的遍历操作,此类执行效率高于HashMap。   ---TreeMap:保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序。底层使用红黑树。   ---Hashtable:作为古老的实现类,比Map还早,1.0就有。线程安全的,效率低。不可以存储null的key和value。     ---Properties:常用来处理配置文件。key和value都是String类型 HashMap的底层:数组+链表(JDK7.0及之前)          数组+链表+红黑树(JDK8.0) 二、Map结构的理解: Map中的key:无序的、不可重复的,使用set存储所有的key。——>key所在类要重写equals()和hashCode()。 Map中的value:无序的、可重复的,使用Collection存储所有的value。——