c
xiaotaiyangzuishuai
这个作者很懒,什么都没留下…
展开
-
memcpy 内存覆盖问题
[以下内容转自:http://my.oschina.net/renhc/blog/36345,作者:任洪彩,2011-12-02],这篇解释的相对比较透彻些!面试中如问到memcpy的实现,那就要小心了,这里有陷阱。先看下标准memcpy()的解释:注意下面的注释,对于地址重叠的情况,该函数的行为是未定义的。事实上所说的陷阱也在于此,自己动手实现memcpy()时就需要考虑转载 2017-09-14 12:04:00 · 3750 阅读 · 0 评论 -
单链表的基本操作
逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着。恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储。由于分散存储,为了能够体现出数据元素之间的逻辑关系,每个数据元素在存储的同时,要配备一个指针,用于指向它的直接后继元素,即每一个数据元素都指向下一个数据元素(最后一个指向NULL(空))。图1 链式存储存放数据如图1所转载 2018-02-05 16:05:44 · 648 阅读 · 0 评论 -
顺序表(线性表的顺序存储结构)及C语言实现
逻辑结构上呈线性分布的数据元素在实际的物理存储结构中也同样相互之间紧挨着,这种存储结构称为线性表的顺序存储结构。也就是说,逻辑上具有线性关系的数据按照前后的次序全部存储在一整块连续的内存空间中,之间不存在空隙,这样的存储结构称为顺序存储结构。使用顺序存储结构存储的数据,第一个元素所在的地址就是这块存储空间的首地址。通过首地址,可以轻松访问到存储的所有的数据,只要首地址不丢,数据永远转载 2018-02-06 09:48:55 · 27271 阅读 · 11 评论 -
C语言sprintf函数的深入理解
由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf比printf有用得多。所以本文着重介绍sprintf,有时也穿插着用用 pritnf。sprintf是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, argument] …转载 2018-01-30 14:36:25 · 7564 阅读 · 0 评论 -
C语言之linux内核可变参实现printf,sprintf
[cpp] view plain copy print?#include <stdarg.h> #define NULL 0 //如果字符串中为数字,则返回数字 static int skip_atoi(const char **s) { int i = 0; while (isdigit(**s)) i = i * 10 + *((...转载 2018-02-11 16:24:00 · 501 阅读 · 0 评论 -
静态链表及C语言实现
逻辑结构上相邻的数据元素,存储在指定的一块内存空间中,数据元素只允许在这块内存空间中随机存放,这样的存储结构生成的链表称为静态链表。静态链表和动态链表的区别:静态链表限制了数据元素存放的位置范围;动态链表是整个内存空间。图1 静态链表的存储结构静态链表的构建方法静态链表使用数组这一数据类型预先申请足够大的内存空间。由于各数据元素在数组申请的内存空间内随机转载 2018-02-06 15:14:52 · 2962 阅读 · 3 评论 -
循环链表(约瑟夫环)的建立及C语言实现
链表的使用,还可以把链表的两头连接,形成了一个环状链表,称为循环链表。和它名字的表意一样,只需要将表中最后一个结点的指针指向头结点,就形成了一个环。图1 循环链表循环链表和动态链表相比,唯一的不同就是循环链表首尾相连,其他都完全一样。实际应用:约瑟夫环问题约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(以编号1,2,3,…,n分别表示)围转载 2018-02-06 17:18:08 · 21304 阅读 · 7 评论 -
数据结构实践项目之俄罗斯轮盘赌小游戏
俄罗斯轮盘赌,想必很多人都听说过,一种残忍的赌博游戏。游戏的道具是一把左轮手枪,其规则也很简单:在左轮手枪中的 6 个弹槽中随意放入一颗或者多颗子弹,在任意旋转转轮之后,关上转轮。游戏的参加者轮流把手枪对着自己,扣动扳机:中枪或是怯场,即为输的一方;坚持到最后的即为胜者。本节实践项目同轮盘赌类似,游戏规则:n 个参加者排成一个环,每次由主持向左轮手枪中装一颗子弹,并随机转动关上转轮,游戏从第一个人...转载 2018-02-12 11:38:13 · 4679 阅读 · 1 评论 -
getchar、fgetc、gets、fgets、scanf、sscanf、fscanf详解
getchar:函数原型:int getchar(void);作用:从标准输入里读取下一个字符,相当于getc(stdin)。返回类型为int型,为用户输入的ASCII码或EOF。例:while ((c = getchar()) != '\n')printf("%c", c);}do {c = getchar()...转载 2019-03-06 21:44:10 · 888 阅读 · 0 评论 -
文件打开模式解析
C语言文件打开模式浅析 在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图: 打开模式 只可以读 只可以写 读写兼备 文本模式 r w a r+ w+ ...转载 2019-03-06 21:55:09 · 2781 阅读 · 0 评论 -
fprintf()、sprintf()、printf()、fwrite()函数的用法与区别
1: fprintf()函数主要用于格式化信息输出到指定的文件流中返回值:成功则返回输出的字节数,失败返回eof;#include <stdio.h>int fprintf( FILE *stream, const char *format, ... );fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf...转载 2019-03-06 21:58:29 · 1437 阅读 · 0 评论 -
常见数据结构与算法整理总结
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出。为了便于描述,文中涉及到的代码部分都是用Java语言编写的,其实Java本身对常见的几种数据结构,线性表、栈、队列等都提供了较好的实现,就是我们经常用到的Java集合框架,有需要的可以转载 2018-01-10 14:03:30 · 10187 阅读 · 0 评论 -
常见数据结构与算法整理总结(下)
这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算法相关内容,文章中如有错误,欢迎指出。一、概述二、查找算法三、排序算法四、其它算法五、常见算法题六、总结一、概述以前看到这样一句话,语言只是工具,算法才是程序设计的灵魂。的确,算法在计算机科学中的地位真的很重要,在很多大公司的笔试面试中,算法掌握程度的考察都占据了很大一部转载 2018-01-18 15:23:13 · 1643 阅读 · 0 评论 -
常见数据结构与算法整理总结
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出。为了便于描述,文中涉及到的代码部分都是用Java语言编写的,其实Java本身对常见的几种数据结构,线性表、栈、队列等都提供了较好的实现,就是我们经常用到的Java集合框架,有需要的可以转载 2018-01-18 15:21:58 · 227 阅读 · 0 评论 -
大小端的判断 十进制itoa实现
编程判断当前处理器使用的大端模式还是小端模式? 思路一: int a=0x12345678; char *p = (char *)&a; if(*p == 0x12) printf("大端"); 思路二:原创 2017-10-31 17:20:27 · 354 阅读 · 0 评论 -
数据结构的逻辑结构和物理结构
数据结构:指的是数据之间的相互关系,包含三个内容:逻辑结构,存储结构和数据的运算数据的逻辑结构指数据元素之间的逻辑关系,分两种,线性结构和非线性结构。常用的线性结构有:线性表,栈,队列,双队列,数组,串。数据结构在计算机中的表示(又称映像)称为数据的物理结构,或称存储结构。数据的存储结构可采用顺序存储或链式存储的方法。存储结构是数据的逻辑结构用计算机语言的实原创 2017-10-25 14:41:05 · 10636 阅读 · 0 评论 -
冒泡排序
下面给出了冒泡排序的一般实现和优化实现。一般实现是教科书里常见的实现方法,无论数组是否排序好了,都会进行N-1轮比较; 而优化实现,在数组已经排序好的情况下,会提前退出比较,减小了算法的时间复杂度。纯文本复制#include#include#define N 8void bubble_sort(int a[],int n);//一般实现void bubble_sort(in转载 2017-11-24 14:12:24 · 182 阅读 · 0 评论 -
数据结构与算法-------归并
/******************************* 归并排序http://blog.csdn.net/ns_code/article/details/20306991********************************/#include#include/*将有序的arr[start...mid]和有序的arr[mid+1...end转载 2018-01-15 15:09:32 · 265 阅读 · 0 评论 -
数据结构与算法---------快速排序
实现思想 快速排序的基本思想如下: 1、从待排序列中任选一个元素作为枢轴; 2、将序列中比枢轴大的元素全部放在枢轴的右边,比枢轴小的元素全部放在其左边; 3、以枢轴为分界线,对其两边的两个子序列重复执行步骤1和2中的操作,直到最后每个子序列中只有一个元素。 一趟快速排序(以排序后从小到大为例)的具体做法如下: 附设转载 2018-01-15 15:48:53 · 257 阅读 · 0 评论 -
数据结构与算法-----二分查找
二分査找也称折半査找,其优点是查找速度快,缺点是要求所要査找的数据必须是有序序列。该算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为基准将所要査找的序列分为左右两部分。#include binarySearch(int a[],int n,int key){int low = 0;i转载 2018-01-24 11:39:06 · 207 阅读 · 0 评论 -
数据结构与算法——冒泡排序
冒泡排序是排序算法的一种,思路清晰,代码简洁,常被用在大学生计算机课程中。“冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。这里以从小到大排序为例进行讲解。基本思想及举例说明冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,以此类推。下面以对 3 2转载 2018-01-24 12:16:27 · 244 阅读 · 0 评论 -
数据结构与算法——选择排序
基本思想及举例说明选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。下面,以对 3 2 4 1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置。第1轮 排序过程 (转载 2018-01-24 12:17:54 · 172 阅读 · 0 评论 -
数据结构与算法——插入排序
插入排序是排序算法的一种,它不改变原有的序列(数组),而是创建一个新的序列,在新序列上进行操作。这里以从小到大排序为例进行讲解。基本思想及举例说明插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。在实际使用中,通常是排序整个无序数组,所以把这个无序数组分为两部分排序好的子数组和待插入的元素转载 2018-01-24 12:19:27 · 243 阅读 · 0 评论 -
很全面的算法和数据结构知识(含代码实现)
在线练习在线编程面试数据结构算法贪心算法位运算复杂度分析视频教程面试宝典计算机科学资讯文件结构在线练习LeetCodeVirtual JudgeCareerCupHackerRankCodeFightsKattisHackerEarthCodilityCode ForcesCode ChefSphere Online Judge – SPOJ在线编程面试GainloRefdash数据结构链表链表是转载 2018-01-18 15:03:37 · 4045 阅读 · 1 评论 -
判断是否读取到文件结尾问题
在c语言中,判断文件结尾有两种方法,第一种是使用feof()函数,feof(fp)用于测试fp所指向的文件的当前状态是否为“文件结束”。如果是,函数则返回的是非0值(真),否则为0(假),要注意的是,feof()是先读文件在判断是不是到达文件结束,所以当使用feof()作为循环判断条件的话,就需要注意一种情况,就是当文件为空的时候,它也会读取一次文件内容然后再跳出循环,所以有可能会读取到一些不可知...原创 2019-03-07 21:31:17 · 20208 阅读 · 0 评论