- 博客(16)
- 收藏
- 关注
原创 单链表-----带头结点的单链表
线性表 优点:无需为表中元素之间逻辑关系而增加额外的存储空间;可以快速的存储表中任意位置的元素。 缺点:插入和删除需要移动大量数据;(因为相邻两元素的存储位置也具有邻居关系,它们在内存中的位置也是挨着的,中间没有空隙 ,当然就无法快速地介入,而删除后中间留有空隙,自然需要弥补) 解决这一缺陷思路: 所有元素不考虑相邻位置,哪里有空位就在哪里,而只是让每个元素知道它下一个元素的位置在...
2018-08-11 13:04:43 1092
原创 线性表----动态分配
//线性表的动态分配 #include<stdio.h> #include<stdlib.h> #include<assert.h> #define INIT_SIZE 10 typedef struct DSqlist { int *elem; int usedsize;//有效数据个数 int size;//当前分配的存储的容量 }DSqlist ...
2018-08-11 12:58:44 410
原创 线性表------静态分配(List)
/* 线性表定义:从名字上能够感觉到,是具有像线一样的性质的表。 是零个或多个数据元素的有限序列。 首先它是一个序列,也就是说元素之间是有顺序的,若元素存在多个,则第一个元素无直接前驱, 最后一个元素无直接后继,其他元素每个元素都有一个前驱和后继; 其次,线性表强调有限,假设线性表长度为n,当n=0时表示空表。 */ //线性表的静态存储结构 #define SIZE 20;//存储空间初始...
2018-08-10 16:07:39 594
原创 C++面试题精髓
1.、为什么构造函数不能声明为虚函数? 解析:因为虚函数采用的是虚调用的方法,虚调用是指允许在只知道部分信息的情况下 的工作机制,特别允许我们调用一个只知道接口而不知道其对象的准确类型的函数。 但是如果我们要调用构造函数创建对象时,必须要知道对象的准确类型, 因此构造函数不能为虚函数。 2.C++中哪些函数不能被声明为虚函数? 解析:普通函数(非成员函数),构造函数,内联成员函数、静态成员...
2018-08-07 17:47:35 538
原创 浅谈程序的内存布局
Windows在默认情况下,将高地址的2GB空间分配给内核(也可配置1GB),而Linux默认情况下,将高地址的1GB空间分配给内核。这些分配给内核的空间叫内和空间,用户使用剩下的空间称为用户空间。 在用户空间里,有许多地址区间有特殊地位,一般来讲,应用程序使用的内存空间里有如下“默认”的区域; (1)栈:栈用于维护函数调用的上下文,离开了栈函数调用就没法实现;栈通常在用户空间的做高位处...
2018-08-07 17:28:40 3997
原创 编译、链接过程简介
C语言的经典“Hello World” #include<stdio.h> int main() { printf("Hello World\n"); return 0; } 在Linux下,当我们使用GCC来编译Hello World时,只使用最简单的命令:(假设源代码文件名为hello.c) gcc -o hello hello.c 事实上,上述过程分解为4个步骤:...
2018-08-07 14:53:40 120
原创 快速排序(Quick Sort)
快速Quick Sort排序主要思想: (1)分治思想:将原问题分解为若干个规模更小但结构与原问题相似的子问题,递归地解决这些子问题,然后这些子问题的解得的组合为原问题的解。 (2)快速排序是对冒泡排序的一种改进,基本思想是在待排序的序列中选取一个值作为一个基准值,按照这个基准值得大小将这个序列划分成两个子序列, 基准值会在这两个子序列的中间,一边是比基准小的,另一边就是比基准大的。 这样快速排序...
2018-08-07 12:55:40 195
原创 程序员的自我修养——线程基础
什么是线程:有时也被成为轻量级进程,是程序执行流的最小单元。 一个标准的线程是由线程ID,当前指令指针(PC)、寄存器集合和堆栈组成。 一个进程是由一个到多个线程组成,各个线程之间共享程序的内存空间(包括代码段,数据段的堆等)及一些进程级的资源(如打开文件和信号) 多个线程可以互不干扰的并发执行,并共享进程的全局变量和堆的数据; 线程的访问权限 线程的访问权限非常自由,可以访问进程内...
2018-08-05 12:51:00 354
原创 前缀、中缀、后缀、表达式的总结
前缀(波兰式)、中缀、后缀(逆波兰式)表达式 它们都是对表达式的记法,它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;后缀表达式运算符位于与其相关的操作数之后。例: (3 + 4) × 5 - 6 中缀表达式- × + 3 4 5 6 前缀表达式3 4 + 5 × 6 - 后缀表达式1、中缀表达式操作符处于操作数的中间。中缀表达式是人们常用的...
2018-07-30 14:53:23 263
原创 “两数相乘求进制”的方法:
以例题为例:假设在n进制下,下面的等式成立567*456=150216,则n 的值是(D) A:9 B:10 C:12 D:18 求解步骤: 第一步:两乘数的最后一位相乘,题中则是6*7==42,乘积最后一位是6,是因为它不是十进制乘法,所以42%n==6,得出这个结果就把B选项排除。但是选项中的9、12、18都可以使42%n==6,所以进行下一步; 第二步:...
2018-07-30 14:51:32 918
原创 时间复杂度及空间复杂度的计算
时间复杂度:执行的次数和问题规模之间的函数关系。 时间复杂度计算方法: 1.用常数1取代运行时间中的所有加法常数; 2.只考虑最高阶项,低阶项直接丢掉; 3.系数不要,指数不能丢。 最后,得到的最后结果就是时间复杂度。 常见的时间复杂度: 按数量级递增排列,常见的时间复杂度有: 常数阶O(1),对数阶O( log n ),线性阶O(n),平方阶O(n^2),立方阶O(n^3),...,k次方阶...
2018-07-30 14:48:41 2962
原创 Linux下C语言程序的编译过程
使用gcc编译程序时,编译工程分为4个阶段: (1)预处理:(Pre-Processing) (2)编译:(Compiling) (3)汇编:(Assembling) (4)链接:(linking) 预处理、编译、汇编是3个不同的阶段,但gcc在实际操作时可以把3个步骤合并为一个步骤来执行。下面以一个实例介绍如何生成各个阶段的代码。下面演示都针对文件 hello.c 进行。 1、...
2018-07-30 14:43:26 495
原创 Linux 中一些常用的命令
Linux中一些重要目录: bin:命令,二进制可执行程序 boot:内核,与启动有关的文件 dev:设备文件(光驱) etc:系统的配置文件 home:所有普通用户的家目录 lib:系统存放库文件的地方 media:多媒体 mnt:临时挂载点 $:表明是普通用户 proc:虚拟的目录,里面存放的是进程的属性信息 root:管理员的家目录 selinux:安全软件 tm...
2018-07-30 14:31:58 259
原创 选择排序了解一下
选择排序是一种简单直观的排序算法,它的主要思想:初始时在序列中找到最小(大)的元素,放到序列的起始位置作为已排序序列;然后再从剩余未排序元素中继续寻找最小(大)的元素,放到已排序序列的末尾,以此类推,直到所有元素均排序完毕。 即每遍历一次就记住了最大(小)的元素的位置,最后仅需要一次交换操作就可以放到其适合的位置。 如下图所示: 实现代码如下: #include<stdio.h...
2018-07-30 14:22:53 168
原创 冒泡排序了解一下
什么是冒泡排序?冒泡排序是一种最基础的交换排序。 大家一定喝过汽水,汽水中常常有许多小小的气泡,哔啦哗啦飘到上面来。这是因为组成气泡的二氧化碳比水要轻,所以小气泡可以一点一点向上浮动。 而我们的冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以像小气泡一样,根据自身的大小,一点一点向着数组的一侧移动。 具体如何移动呢?让我们来看个例子(从小到大的顺序排列) 代码实现: ...
2018-07-30 13:41:24 126
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人