指针

四种排序算法

▼魔方 西西 提交于 2020-04-06 03:57:24
前言:经过昨天做的排序算法题,发现自己这么简单的题都忘记怎么做了,感觉很难受,今天复习整理了一遍,写成一个文章,以便日后复习,其中冒泡、选择、插入三种算法的思路和图片来自于B站up主"正月点灯笼",感谢你的讲解,我觉得你讲的非常好! 冒泡排序 例如 3、7、4、2、6、1这一个数组,我们对它进行升序的一个排序 1、首先从左往右两两进行比较,若左>右,则交换位置,进行第一趟排序 对于这第一趟的排序,并不能保证从左往右一定都是正确的升序排序,但是一定能保证最大的数已经排在了最右边 由此,我们可以得到一个思路,在第一趟排序后,我们只需要对这个长度为6的数组左边5个数字再进行一次冒泡排序,然后再对左边4个数字再进行一次冒泡排序,以此类推..... #include <stdio.h> /* 冒泡排序算法 */ /*** * @Description:交换函数,交换括号内的参数 * [@Param](https://my.oschina.net/u/2303379): &a,&b * [@return](https://my.oschina.net/u/556800): * [@Author](https://my.oschina.net/arthor): JaneRoad * [@Date](https://my.oschina.net/u/2504391): 2020/4/1 */

指针运算(C++)

一世执手 提交于 2020-04-06 00:31:34
//本文是学习《C++程序设计教程--设计思想与实现》的笔记。 1、指针可以进行加减运算。 数组名本身,没有方括号和下标,实际上是一个地址,表示数组起始地址。 整型数组的数组名本事得到一整数地址,字符数组的数组名得到一字符地址。 可以把数组起始地址赋值给一指针,通过移动指针(加减指针)来对数组元素进行操作。 例如:下面程序用指针运算来计算数组元素的和: #include<iostream.h> int main(){ int iArray[10]; int sum = 0; int * iPtr = iArray;//用数组名 iArray给指针初始化 //int *iPtr; //iPtr = iArray;这两句和上面一句是相等的//iPtr = &iArray[0];这句与左边那句相同 for(int i = 0;i < 10;i++){ iArray[i] = i * 2; cout<<"*iArray["<<i<<"]"<<"is "<<iArray[i]<<endl; } for(int idex = 0; idex < 10; idex++){ sum += *iPtr; cout<<"*iPtr is "<<*iPtr<<endl; iPtr++; } cout<<"sum is"<<sum<<endl; } sum += *iPtr; iPtr++; 等同于

单链表是否有环和两个链表是否有公共节点问题

痴心易碎 提交于 2020-04-05 22:04:32
1、单链表是否有环 题目描述 :有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题: 1、 如何判断一个链表是不是这类链表 ? 2、 如果链表为存在环,如何找到环的入口点 ? 一、判断链表是否存在环 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)。 1: boolean isExsitLoop() { 2: Node<T> slow = head; 3: Node<T> fast = head; 4: 5: while (fast != null && fast.next != null) { 6: slow = slow.next; 7: fast = fast.next.next; 8: 9: if (slow == fast) 10: return true; 11: } 12: return false; 13: } 二、找到环的入口点 当fast若与slow相遇时,slow肯定没有走遍历完链表,而fast已经在环内循环了n圈(1<=n)。假设slow走了s步,则fast走了2s步(fast步数还等于s 加上在环上多转的n圈)

c语言-指针

孤街醉人 提交于 2020-04-05 15:34:03
指针 一、指针的地址 1、变量的地址 计算机中,数据存储在内存中,内存可划分为若干存储单元,每个单元可以存放8位二进制数,即1个字节。内存单元采用线性地址编码,每个单元具有唯一一个地址编码。 【1】变量的地址: 系统 为变量分配的内存单元的地址(内存中每一个字节都有一个编号, 就是“地址”,是一个 无符号整型数 ) 【2】变量的有关概念 存储内容:数据值 空间大小:数据类型 空间位置:地址 生存周期:存储类别 2、变量的访问方式 【1】直接访问 int a; float b; a = 3; //直接将3放入a的地址 b = 4; 【2】间接访问:定义一个变量p,存放a的地址,通过p来访问a 3、指针变量: 存放地址的变量 例:p为指针变量,它存放整型变量a的首地址,就称指针变量p 指向 整型变量a 二、指针变量的定义与引用 指针变量在使用前必须定义,使其指向特定类型的变量,指针变量存放地址,必须定义为“指针类型”。 1、定义方法   类型符 *指针变量名 指针变量的类型 所指向的内存中存放的数据的类型 int *p1,*p2; char *ps; float *pf1,*pf2; 2、指针变量的赋值 【1】指针变量的值为地址,是一个无符号整数, 但不能直接将整型常量赋给指针变量 。 注:变量的类型必须与指针变量的类型相同,若不赋值,则指针变量的值是随机的( 会很危险

Golang数组指针和指针数组

♀尐吖头ヾ 提交于 2020-04-04 22:49:49
数组很简单,有PHP基础一看就会,和PHP数组大不一样,不同的就是只有数字索引key,并且要指定类型 声明和初始化示例: package main import "fmt" func main() { // 声明 var arr1 [5]int arr1 = [5]int{1,2,3,4,5} // 声明并初始化 var arr2 [5]int = [5]int{1,2,3,4,5} // 直接初始化,只能在函数里 arr3 := [5]int{1,2,3,4,5} fmt.Println(arr1, arr2, arr3) } 数组循环,主要是for 和 for range 具体网上搜索一些会有很多教程,本文就不详细说,现在来点难的: 数组指针和指针数组: package main import "fmt" // 声明整形数组指针类型,表示该类型变量里存储的是一个数组的首地址 type arrPoint *[6]int func main() { // 声明并初始化数组,大小为6个元素整形数组,前5个数字是0,最后一个2 var a = [6]int{5: 2} var a1 = [6]int{5: 3} // 数组指针,变量的内容是数组的地址 var b arrPoint = &a var b1 arrPoint = &a1 // 指针数组,大小为2元素类型为arrPiont

java对象结构 对象头 Markword

前提是你 提交于 2020-04-04 09:07:51
概述 对象实例由对象头、实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ------------| --------- | | markword | 32bit | 64bit | | 类型指针 | 32bit |64bit ,开启指针压缩时为32bit | | 数组长度 | 32bit |32bit | header.png compressed_header.png 可以看到 开启指针压缩时,markword占用8bytes,类型指针占用8bytes,共占用16bytes; 未开启指针压缩时,markword占用8bytes,类型指针占用4bytes,但由于 java内存地址按照8bytes对齐,长度必须是8的倍数 ,因此会从12bytes补全到16bytes; 数组长度为4bytes,同样会进行对齐,补足到8bytes; 另外从上面的截图可以看到,开启指针压缩之后,对象类型指针为0xf800c005,但实际的类型指针为0x7c0060028;那么指针是如何压缩的呢?实际上由于java地址一定是8的倍数,因此将0xf800c005*8即可得到实际的指针0x7c0060028,关于指针压缩的更多知识可参考 官方文档 。 markword结构 markword的结构

《php和mysql web开发》读书笔记

有些话、适合烂在心里 提交于 2020-04-04 04:09:10
总算是强迫自己把第一篇给看完了,在这里做一个小结,将一些知识点记录下来。 一、第一篇 使用PHP 1.php中的注释。php支持c、c++和shell脚本风格注释  /**/多行注释 //单行注释 # 单行注释 2.date()函数。  date("H:i:s");  //15:24:23 date("ymd");  //20130707 3.使用$_POST['username'] $_GET'['username']来得到表单内容,取决于提交表单时使用的方法是post 还是get。无论使用什么方式,都可以使用$_REQUEST['username']来得到表单内容。 4.标识符是变量名称的名称,标识符可以是任何长度。由字母、数字、下划线组成。不能以数字开始。标志符区分大小写,但是函数名称是个例外,函数名不区分大小写。php的特性之一就是它不要求在使用变量之前声明变量。 5.php中的8种数据类型,6种常用,2种不常用。  Integer(整数)  用来表示整数  Float(浮点数,也叫Double,双精度值)  用来表示所有实数  String(字符串)  用来表示字符串  Boolean(布尔值)  用来表示true 或false  Array(数组)    用来保存具有相同类型的多个数据项。  Object(对象)   用来保存类的实例 还有两个特殊的类型:NULL(空

20141227文件夹和文件操作二

北城余情 提交于 2020-04-04 03:30:07
文件操作 对文件里面的内容进行读写 PHP5文件操作 将文件的内容整个进行读取和写入 读取文件 file_get_contents:从一个指定的文件内读取数据内容。 写入内容 file_put_contents:将指定的字符串写入到对应的文件 注意:file_put_contents如果要写入的文件不存在,系统会自动创建,有的话就直接写入 默认的file_put_contents写入数据的时候,会先清空数据再写入 如果要在文件后面追加内容:应该使用file_put_contents的第三个参数 FILE_USE_INCLUDE_PATH:先清空文件,再重新写入(默认的) FILE_APPEND:追加数据到文件末尾 file操作 file就是将一个文件里面的内容,逐行取出,存放到一个数组的元素里,返回一个数组 PHP4文件操作 php5以前文件的操作,与文件夹一样,都是通过资源的形式进行操作 1. 获取文件资源 fopen:打开一个文件资源 如果是通过资源形式去操作文件的话,那么必须在打开文件的时候,就指定操作模式。 只读模式打开 2. 读取文件内容 fgetc:c代表character,一次读取一个字符 fgets:s代表string,代表可以读取多个字符,取决于指定的读取长度或者是否碰到换行(最多只能读取一行数据) 两个函数都是对当前资源指针进行操作,读取之后都会将指针下移

C++程序设计POJ》《WEEK7 输入输出和模板》《二进制文件读写》《模板》《类模板与派生》

与世无争的帅哥 提交于 2020-04-04 00:44:19
二进制读文件 ifstream fstream 读 ofstream fstream 写 inFile.gcount();//看刚才读了多少个字节 比如快到文件末尾,如果最后只剩8个字节,却要读10个字节,最后只会读8个字节 fstream东西比较全 ‘\0’ 为什么存成.dat格式?比纯文本节省空间,空格也占空间,纯文本是字符串格式 10亿,10个字节,.dat 一个int 4个字节搞定 Jane 本来后面就有个\0 Mike 内存缓冲区 二进制文件和文本文件的区别 二进制读文件 ifstream 和 fstream 的成员函数: istream& read (char* s, long n) 将文件读指针指向的地方的 n 个字节内容,读入到内存地址 s ,然 后将文件读指针向后移动 n 字节 以 ios ::in 方式打开文件时,文件读指 针开始指向文件 开头 。 二进制写文件: ofstream 和 fstream 的成员函数: istream& write (const char* s, long n); 将内存地址 s 处的 n 个字节内容,写入到文件中写指针指向的位置, 然后将文件写指针向后移动 n 字节 以 ios::out 方式打开文件时,文 件写指针开始指向文件开头 , 以 ios::app 方式打开文件时,文件写 指针开始指向文件尾部 。 /* 二进制文件读写

1.7 c之 指针

心已入冬 提交于 2020-04-03 23:28:34
指针 *P代表指针变量P所指的那个变量,也就是变量a。 为什么需要指针? 指针存在的目的就是间接访问。有了指针之后,我们访问变量a不必只通过a这个变量名来访问。而可以通过p = &a; *p = xxx这样的方式来间接访问变量a。 两个重要的运算符: &和* 指针的定和初始化 指针既然是一种变量,那么肯定也可以定义和初始化 第一种:先定义再赋值 int p; //定义指针变量p p = &a; //给p赋值 第二种:定义的同时初始化 int p = &a; //效果等同于上面的两句 使用指针的时候,*P则代表指针变量P所指向的那个变量。 int a = 23; int *p; P=&a; p = 111; 这里相当于a = 111 printf(“a = %d.\n”,a) :指针符号。指针符号在指针定义和指针操作的时候,解析方法是不同的。 int P; 定义指针变量p,这里 p含义不是代表指针变量P所指向的那个指针变量,在定义时这里的 含义告诉编译器P是一个指针。 使用指针的时候, p则代表指针变量p所指向的那个变量。 指针全程是指针变量,其实质就是c语言的一种变量。这种变量比较特殊,通常他的值会被赋值为某个变量的地址值( P = &a ),然后我们可以使用*p这样的方式间接访问p所指向的那个变量。 指针变量本质上是一个变量, 指针变量的类型属于指针类型 指针与数组的初次结合