指针

线性表的简单应用

独自空忆成欢 提交于 2020-01-26 20:10:05
线性表 •线性表是我们最先接触,也是最简单的一种数据结构的表现方式。 •线性表分为顺序表和链表,也就是顺序存储结构和链式存储结构的两种表现形式。 1.顺序表   •顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 1.定义顺序表结构体: #define MAXN 100100typedef struct list { int data[MAXN]; //存储空间 int last; //当前最后一个元素的下标(last+1表示当前表的长度) int maxsize; //最大元素个数(表的最大长度) }squenlist; 2.初始化结构体 void init(squenlist *L,int maxsize) { L->last = -1; //将last赋值为-1为了方便访问数组下标 L->maxsize = maxsize; //获取表的最大长度 } 3.建表 定义了结构体并且初始化了之后,就要开始建表了,建立顺序表的过程可以简化为一个给数组赋值的过程 int

指针的指针

最后都变了- 提交于 2020-01-26 15:44:52
如果要改变实参的值,就传入实参的地址,当我们需要改变指针所指向的地址时,我们就需要指针的指针; 下边我们看一个实例: # include <iostream> # include <string.h> using namespace std ; void address ( char * * p ) { * p = ( char * ) malloc ( 100 ) ; } int main ( ) { char * pointer = NULL ; address ( & pointer ) ; strcpy ( pointer , "Hello,world." ) ; cout << pointer << endl ; return 0 ; } 首先定义一个空指针用于存放字符串,然后使用malloc函数开辟一个长度为100字节的内存空间,使该指针指向它 * p在本质上还是一个指针,malloc函数返回的就是一个指针变量!这里为什么不直接用一个指针是因为要改变实参pointer,要改变实参必须传入实参的地址. 来源: CSDN 作者: M’s Friday 链接: https://blog.csdn.net/Cloud_1234_5678/article/details/103605504

软件工程结对第一次作业

心不动则不痛 提交于 2020-01-26 14:55:53
1. 题目要求 (1). 首先在同学中找一个同伴,范围不限,可以在1~5班中随意组合,建议尽量不要找同组的成员,女同学尽量找男同学结对,但是不做强制要求; (2). 从以往个人完成的项目中选择一个作品,例如:以往的数据结构课程设计或者其它具有比较完整功能的小系统,代码至少要大于100行; (3). 将代码上传至个人GitHub或Coding.net系统中,并将代码地址交给对方; (4). 对同伴的作品进行代码复审,并参照C/C++代码审查表和 Java代码审查表 这两篇博文的内容自行设计代码审查表并填写内容; (5). 将对伙伴审查的结果以表格的形式写到自己的博客作业里,博客中应该附有伙伴作业的GitHub或Coding.net的代码地址; (6). 对同伴的代码写一篇500字以上的评论,介绍同伴的优缺点。 2. 代码coding地址 此代码有王成成同学编写,她所选择的的是她的数据结构课设——离散事件模拟,即模拟银行接待客户,使用C++开发。 [离散事件模拟] https://dev.tencent.com/u/wang_chengcheng/p/jiedui1_lisanshijianmoni/git/blob/master/163401010303-%E7%8E%8B%E6%88%90%E6%88%90-%E7%A6%BB%E6%95%A3%E4%BA%8B%E4%BB%B6

this指针(待完善)

情到浓时终转凉″ 提交于 2020-01-26 14:55:31
1. this 指针的用处:    一个 对象 的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候, 编译器 会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。   例如,调用date.SetMonth(9) <===> SetMonth(&date, 9),this帮助完成了这一转换 . 2. this 指针的使用:   2.1 一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;   2.2 另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。 3. this 指针程序示例:   this指针存在于 类的成员函数 中,指向被调用函数所在的类实例的地址。    #include<iostream.h>    class Point    {    private:    int x, y;    public:    Point(int a, int b) { x=a; y=b;}    void MovePoint( int a, int b){ x+=a; y+

_数据结构_快速排序

旧时模样 提交于 2020-01-26 14:36:02
快速排序是一种二叉树结构的交换排序算法     其基本思想是在序列中找一个元素作为基准值,将排序集合分割为两个子序列,左子序列中的所有元素都小于基准值,右子序列中的所有元素均大于基准值,再将左右子树重复此操作,知道所有元素都排列在相应位置 源代码获取: https://github.com/akh5/C-/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E6%8E%92%E5%BA%8F/quicksort.c 讨论前后指针法 序列中分别在前后定义两个指针,将一开始开头指针指向的值作为基准值,后指针开始向前遍历,遍历到比基准值小的值时,当前位置的值与基准值交换,前指针开始向后遍历,遇到比基准值大的值时,当前位置与基准值交换,,换前指针向前遍历,反复交替,直到前指针与后指针交叉。 此时将序列分为左右两个子树,基准值为根,左子树均小于基准值,右子树均大于基准值 # include <stdio.h> void Swap ( int * a , int * b ) //交换的函数 { int temp ; temp = * a ; * a = * b ; * b = temp ; } void dealsort ( int * arr , int start , int end ) { if ( start >= end ) {

面向对象程序设计寒假第一次作业

大憨熊 提交于 2020-01-26 14:26:27
面向对象程序设计第一次作业 这个作业属于哪个课程 2020年面向对象程序设计 这个作业要求在哪里 面向对象设计寒假作业1 这个作业的目标 安装c++开发环境,完成问答题,实践题以及编程题,并发布博客。 参考文献 《C程序设计》 ----- c语言汉字读取 ----- 命令行使用 ----- 汉字与Ascii码转换器 ----- c语言编译过程 ----- c语言指针概念 问答题: 如果你不了解C++请回答以下问题:你认为C语言有什么缺陷(你觉得哪里用的不顺手)。 一.指针,作为一名大学才接触计算机编程练打字都要看键盘的字母的小白,个人觉得c语言指针部分用得比较不太顺手,相对其它章节概念比较抽象,在一次pta平台作业中基本均涉及指针的情况下便运用数组解决问题,在其中相关要求构建螺旋方阵可以直接运用二维数组知识解决实际问题,当然对于代码小白想要运用指针来解决螺旋方阵我自己觉得上机考试要考这玩意首先想到的就是二维数组,还有连连看问题根据题目所述还是二维数组比较方便,虽然指针更便捷还是c语言的特色,运用还是取决于个人,个人觉得指针用来指向二维数组比较麻烦, 直接用来取一维指针值而在用于处理二维数组中需要在 (f+x)+y(假定f就是指向二维数组的指针,y,x均为常数)此时仅获得该元素的地址需要在加上*获取值,就简洁度而言还是二维数组比较吃香,体现在构建函数时需要输入的形式参数的值是地址

每天AC系列(四):四数之和

吃可爱长大的小学妹 提交于 2020-01-26 13:27:07
1 题目 Leetcode第18题 ,给定一个数组与一个target,找出数组中的四个数之和为target的不重复的所有四个数. 2 暴力 List<List<Integer>> result = new ArrayList<>(); if (nums.length == 4 && nums[0] + nums[1] + nums[2] + nums[3] == target) result.add(Arrays.asList(nums[0], nums[1], nums[2],nums[3])); else if (nums.length > 4) { Arrays.sort(nums); Set<List<Integer>> resultSet = new HashSet<>(); for(int i=0;i<nums.length-3;++i) { for(int j=i+1;j<nums.length-2;++j) { for(int k=j+1;k<nums.length-1;++k) { for(int m=k+1;m<nums.length;++m) { if(nums[i]+nums[j]+nums[k]+nums[m] == target) resultSet.add(Arrays.asList(nums[i],nums[j],nums[k],nums[m]));

学习JDK1.8集合源码之--ArrayDeque

谁说我不能喝 提交于 2020-01-26 11:14:52
1. ArrayDeque简介   ArrayDeque是基于数组实现的一种双端队列,既可以当成普通的队列用(先进先出),也可以当成栈来用(后进先出),故ArrayDeque完全可以代替Stack,ArrayDeque是非线程安全的,Stack是线程安全的。   ArrayDeque虽然是基于数组实现的,但很容易被数组这种数据结构所迷惑。因为数组是从0开始到length-1位置结束的,但ArrayDeque的实现实际上是一种循环结构的队列,首尾位置完全靠head和tail两个首尾指针来决定的,正常理解的情况下head的值应该比tail小,但是这里会出现head比tail大的情况。所以这里我们不能以正常数组的角度去看待,我可以把这个数组看成一个环形结构的首尾相连的结构,即数组最后一位的下一位就是第一位(不要习惯性把0当成头部,length-1当成尾部),数据都存储在head右边及tail的左边,不知道有没有说清楚~~   除此之外,ArrayDeque对队列的容量有特殊的要求,必须是2^n(这里和HashMap类似),由于2^31超出int的最大值,故ArrayDeque的最大容量为2^30。ArrayDeque不允许存储null值,原因是需要通过取出的元素是否为null来判断队列是否为空。   关于更多关于ArrayDeque的讲解,这篇文章讲的很好: 【源】ArrayDeque

C++数组、指针、引用

限于喜欢 提交于 2020-01-26 10:48:41
1 int &arr[10]; //arr为引用的数组 2 int (&arr)[10]; //arr为具有10个整数的整型数组的引用 3 4 int *arr[10]; //arr为指针的数组 5 int (*arr)[10]; //arr为具有10个整数的整型数组的指针 来源: https://www.cnblogs.com/safety/p/12233774.html

c和指针

守給你的承諾、 提交于 2020-01-26 10:48:23
1、简介 2、基本概念 3、指针 计算机内存的最小单位是位(bit),每个位可以容纳值0或1,单独的位用处不大,通常许多位合成一组作为一个单位,以存储较大范围的值 每个字节包含8位,可以存储无符号值0至255,或有符号值-128至127 为了存储更大的值,把两个或多个字节合在一起作为更大的内存单位,如许多机器以字为单位存储整数,每个字由2或4个字节组成 每个字的地址是它最左边那个字节位置的地址 高级语言通过名字而不是地址来访问内存的位置 名字与内存位置之间的关联是编译器实现的,硬件仍通过地址访问内存位置 不能简单地通过检查一个值的位来判断它的类型,还必须观察程序中这个值的使用方式 通过一个指针访问它所指向的地址的过程称为间接访问或解引用指针 来源: https://www.cnblogs.com/cxc1357/p/12153160.html