Welcome 微信登录

首页 / 软件开发 / C语言

C和指针(续)

C和指针(续)

C和指针(续)2009-10-22 博客园 abruzzi前言上一篇《》可能对关于C和指针的有些内容没有说透,下来写了一个链表的实现,当然,也是用C的函数指针来模拟OO的结构来做的。链表结构本身比较复杂(关于指针的使用方面),所以这个例子可能更清晰一些。之所以选List这个例子来说,是因为大家在学校里肯定接触过这个简单数据结构,从一个比较熟悉的例子入手可能比较容易理解一些。接口定义可以先看看接口的定义,与Java或者C#类似:/* * File: IL...
C语言的条件编译

C语言的条件编译

C语言的条件编译2010-01-01有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,就没必要把所有的代码都写进去,就可以用条件编译,通过预编译指令设置编译条件,在不同的需要时编译不同的代码。(一)条件编译方法条件编译是通过预编译指令来实现的,主要方法有:1、#if, #elif, #else, #endif...
彻底搞定C语言指针 第二篇

彻底搞定C语言指针 第二篇

彻底搞定C语言指针 第二篇2010-01-01千里草二、指针是什么东西想说弄懂你不容易啊!我们许多初学指针的人都要这样的感慨。我常常在思索它,为什么呢?其实生活中处处都有指针。我们也处处在使用它。有了它我们的生活才更加方便 了。没有指针,那生活才不方便。不信?你看下面的例子。这是一个生活中的例子:比如说你要 我借给你一本书,我到了你宿舍,但是你人不在宿舍,于是我把书放在你的2层3号的书架上,并写了一 张纸条放在你的桌上。纸条上写着:你要的书在第2层3号的书...
彻底搞定C语言指针 第四篇

彻底搞定C语言指针 第四篇

彻底搞定C语言指针 第四篇2010-01-01千里草1 int i 说起你知道我们申明一个变量时象这样int i ;这个i是可能在它处重新变赋值的。 如下:int i=0;//…i=20;//这里重新赋值了不过有一天我的程 序可能需要这样一个变量(暂且称它变量),在申明时就赋一个初始值。之后我的程序在其它任何处都 不会再去重新对它赋值。那我又应该怎么办呢?用const .//**************const int ic =20;//&...
彻底搞定C语言指针 第六篇

彻底搞定C语言指针 第六篇

彻底搞定C语言指针 第六篇2010-01-01千里草指向另一指针的指针一、针概念:早在本系列第二篇中我就对指针的实质进行了阐述 。今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧!当我 们程序如下申明变量:short int i;char a;short int * pi;程序会 在内存某地址空间上为各变量开辟空间,如下图所示。内存地址→6 7 8 9 10 11 12 ...
c语言算法 - 分而治之算法

c语言算法 - 分而治之算法

c语言算法 - 分而治之算法2010-01-28君主和殖民者们所成功运用的分而治之策略也可以运用到高效率的计算机算法的设计过程中。本章将首先介绍怎样在算法设计领域应用这一古老的策略,然后将利用这一策略解决如下问题:最小最大问题、矩阵乘法、残缺棋盘、排序、选择和计算一个几何问题——找出二维空间中距离最近的两个点。本章给出了用来分析分而治之算法复杂性的数学方法,并通过推导最小最大问题和排序问题的复杂性下限来证明分而治之算法对于求解这两种...
c语言算法 - 分而治之算法 - 残缺棋盘

c语言算法 - 分而治之算法 - 残缺棋盘

c语言算法 - 分而治之算法 - 残缺棋盘2010-01-28残缺棋盘(defective chessboard)是一个有2k×2k 个方格的棋盘,其中恰有一个方格残缺。图2 - 3给出k≤2时各种可能的残缺棋盘,其中残缺的方格用阴影表示。注意当k= 0时,仅存在一种可能的残缺棋盘(如图1 4 - 3 a所示)。事实上,对于任意k,恰好存在22k 种不同的残缺棋盘。残缺棋盘的问题要求用三格板(t r i o m i n o e s)覆盖残...
c语言算法 - 分而治之算法 - 归并排序

c语言算法 - 分而治之算法 - 归并排序

c语言算法 - 分而治之算法 - 归并排序2010-01-28可以运用分而治之方法来解决排序问题,该问题是将n个元素排成非递减顺序。分而治之方法通常用以下的步骤来进行排序算法:若n 为1,算法终止;否则,将这一元素集合分割成两个或更多个子集合,对每一个子集合分别排序,然后将排好序的子集合归并为一个集合。假设仅将n个元素的集合分成两个子集合。现在需要确定如何进行子集合的划分。一种可能性就是把前面n- 1个元素放到第一个子集中(称为A),最后一个元素放到第二个...
c语言算法 - 分而治之算法 - 距离最近的点对

c语言算法 - 分而治之算法 - 距离最近的点对

c语言算法 - 分而治之算法 - 距离最近的点对2010-01-28给定n个点(xi,yi)(1≤i≤n),要求找出其中距离最近的两个点。例14-7 假设在一片金属上钻n个大小一样的洞,如果洞太近,金属可能会断。若知道任意两个洞的最小距离,可估计金属断裂的概率。这种最小距离问题实际上也就是距离最近的点对问题。通过检查所有的n(n- 1 ) / 2对点,并计算每一对点的距离,可以找出距离最近的一对点。这种方法所需要的时间为(n2 )。我们称这种方...
c语言算法 - 分而治之算法 - 快速排序

c语言算法 - 分而治之算法 - 快速排序

c语言算法 - 分而治之算法 - 快速排序2010-01-28分而治之方法还可以用于实现另一种完全不同的排序方法,这种排序法称为快速排序(quick sort)。在这种方法中, n个元素被分成三段(组):左段l e f t,右段r i g h t和中段m i d d l e。中段仅包含一个元素。左段中各元素都小于等于中段元素,右段中各元素都大于等于中段元素。因此l e f t和r i g h t中的元素可以独立排序,并且不必对l e f t和r i g h...
c语言算法 - 分而治之算法 - 选择排序

c语言算法 - 分而治之算法 - 选择排序

c语言算法 - 分而治之算法 - 选择排序2010-01-28对于给定的n个元素的数组a[0 : n - 1],要求从中找出第k小的元素。当a[0 : n - 1]被排序时,该元素就是a[k - 1]。假设n=8,每个元素有两个域k e y和I D,其中k e y是一个整数,I D是一个字符。假设这8个元素为[( 1 2 ,a),( 4 ,b),( 5 ,c),( 4 ,d),( 5 ,e),( 1 0 ,f),( 2 ,g),( 2 0 ,h)], 排序...
c语言算法 - 贪婪算法

c语言算法 - 贪婪算法

c语言算法 - 贪婪算法2010-01-28虽然设计一个好的求解算法更像是一门艺术,而不像是技术,但仍然存在一些行之有效的能够用于解决许多问题的算法设计方法,你可以使用这些方法来设计算法,并观察这些算法是如何工作的。一般情况下,为了获得较好的性能,必须对算法进行细致的调整。但是在某些情况下,算法经过调整之后性能仍无法达到要求,这时就必须寻求另外的方法来求解该问题。本章首先引入最优化的概念,然后介绍一种直观的问题求解方法:贪婪算法。最后,应用该算法给出货箱装...
c语言算法 - 贪婪算法 - 0/1背包问题

c语言算法 - 贪婪算法 - 0/1背包问题

c语言算法 - 贪婪算法 - 0/1背包问题2010-01-28在0 / 1背包问题中,需对容量为c的背包进行装载。从n个物品中选取装入背包的物品,每件物品i的重量为wi,价值为pi。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高,即n ?i=1pi xi 取得最大值。约束条件为n ?i=1wi xi≤c 和xi?[0 , 1]( 1≤i≤n)。在这个表达式中,需求出xt的值。xi=1表示物品i...
c语言算法 - 贪婪算法 - 拓扑排序

c语言算法 - 贪婪算法 - 拓扑排序

c语言算法 - 贪婪算法 - 拓扑排序2010-01-28一个复杂的工程通常可以分解成一组小任务的集合,完成这些小任务意味着整个工程的完成。例如,汽车装配工程可分解为以下任务:将底盘放上装配线,装轴,将座位装在底盘上,上漆,装刹车,装门等等。任务之间具有先后关系,例如在装轴之前必须先将底板放上装配线。任务的先后顺序可用有向图表示——称为顶点活动( Activity On Vertex, AOV)网络。有向图的顶点代表任务,有向边(i...
c语言算法 - 贪婪算法 - 单源最短路径

c语言算法 - 贪婪算法 - 单源最短路径

c语言算法 - 贪婪算法 - 单源最短路径2010-01-28在这个问题中,给出有向图G,它的每条边都有一个非负的长度(耗费) a [i ][ j ],路径的长度即为此路径所经过的边的长度之和。对于给定的源顶点s,需找出从它到图中其他任意顶点(称为目的)的最短路径。图13-10a 给出了一个具有五个顶点的有向图,各边上的数即为长度。假设源顶点s 为1,从顶点1出发的最短路径按路径长度顺序列在图13-10b 中,每条路径前面的数字为路径的长度。利用E. Di...
c语言算法 - 贪婪算法 - 二分覆盖

c语言算法 - 贪婪算法 - 二分覆盖

c语言算法 - 贪婪算法 - 二分覆盖2010-01-28二分图是一个无向图,它的n个顶点可二分为集合A和集合B,且同一集合中的任意两个顶点在图中无边相连(即任何一条边都是一个顶点在集合A中,另一个在集合B中)。当且仅当B中的每个顶点至少与A中一个顶点相连时,A的一个子集A" 覆盖集合B(或简单地说,A" 是一个覆盖)。覆盖A" 的大小即为A" 中的顶点数目。当且仅当A" 是覆盖B的子集中最小的时,A" 为最小覆盖。例1-10 考察如图1 - 6所示的具有...
<< 41 42 43 44 45 46 47 48 49 50 >>