- 博客(16)
- 资源 (1)
- 收藏
- 关注
原创 【十四】队列的特别实现--利用双栈
1、简述代码复用是工程开发中经常用到的,本系列文章也一直致力于使用代码复用,但是要保证所实现的数据结构与算法在各方面都能达到“产品级别的代码”,即向外保持一致的接口,屏蔽内部实现的细节,优化内部实现算法的时间复杂度以及空间复杂度!前面已经使用四种方法实现了队列,有两种使用了代码复用,但时间复杂度方面却不理想,因此又使用了两种不使用代码复用的方法,解决了时间复杂度方面的问题,但是编写起来难免比代码复用
2015-05-31 17:18:13 1500
原创 【十三】队列的链式存储结构
1、链式存储的定义上一篇介绍了队列及其顺序存储,基于上一篇,简介队列的链式存储结构的实现!2、基于链表的实现队列是一种特殊的顺序表,所以可以基于链表来实现队列的链式存储结构!数据结构的定义//因为内部使用的是顺序链表,所以有如下的定义typedef struct _struct_linkqueue{ LinklistNode node; LinkQueueNode *item;}TLi
2015-05-30 22:33:35 647
原创 【十二】队列及其顺序存储结构
1、队列的定义队列是一种特殊的线性表队列仅在线性表的两端进行操作队头( Front):取出数据元素的一端队尾( Rear):插入数据元素的一端队列不允许在中间部位进行操作!2、队列的性质 性质:先进先出(FIFO)3、队列的顺序存储实现示意图: 4、代码复用利用顺序链表,实现顺序存储的队列!/* 在队尾添加一个元素 如果成功,返回1,失败返回0*/int SeqQu
2015-05-30 21:46:05 601
原创 【十一】递归与回溯--解决8皇后问题
1、递归与回溯递归在程序设计中也常用于需要回溯算法的场合回溯算法的基本思想 从问题的某一种状态出发,搜索可以到达的所有状态当某个状态到达后,可向前回退,并继续搜索其它可达状态当所有状态都到达后,回溯算法结束程序设计中可利用函数的活动对象保存回溯算法的状态数据,因此可以利用递归完成回溯算法2、八皇后问题在一个8×8国际象棋盘上,有有8个皇后,每个皇后占一格;要求皇后间不会出现相互“攻击
2015-05-27 22:08:52 847
原创 【十】递归
1、什么是递归?递归是一种数学上分而自治的思想递归将大型复杂问题转化为与原问题相同但规模较小的问题进行处理递归需要有边界条件 当边界条件不满足时,递归继续进行当边界条件满足时,递归停止2、利用递归,实现斐波拉契数列什么叫斐波那契数列? 又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、…… 即第n项是第n-1项与第n-2项的和;完整代码:/* 该函数利
2015-05-27 21:32:51 750
原创 【九】栈与递归--程序栈空间
1、C语言中的疑惑C语言中常说“局部变量在栈上分配空间”,那么这个地方的“栈”和我们之前学习的栈数据结构有关系吗?解答:保存局部变量的栈是函数调用时的栈;程序中的“函数调用栈”是栈数据结构的一种应用;函数调用栈一般是从高地址向低地址增长的 栈底为内存的高地址处栈顶为内存的低地址处函数调用栈中存储的数据被称为活动记录2、什么是活动记录?活动记录是函数调用时一系列相关信息的记录,猜测它应该
2015-05-27 20:54:26 2844
原创 【八】栈的应用实例(二)
1、问题的提出尝试用计算机读入字符串“9+(3-1)*5+8/2+(5/2)”并计算值2、中缀表达式 与 后缀表达式波兰科学家在20世纪50年代提出了一种将运算符放在数字后面的后缀表达式 对应的,我们习惯的数学表达式叫做中缀表达式 实例: 5 + 3 => 5 3 + 1 + 2 * 3 => 1 2 3 * + 9 + ( 3 – 1 ) * 5 => 9 3 1 –
2015-05-27 09:30:51 900
原创 【七】栈的应用实例(一)
1、提出问题在C语言中有一些符号是成对匹配出现的 括号: ( ), [ ], { }, <> 引号: ‘ ‘, “ “ 检查它们是否成对出现是所有编译器实现的基本功能,可用于基本的语法检查,这个问题就可通过栈来实现!2、算法实现思路从第一个字符开始扫描当遇见普通字符时忽略,当遇见左符号时压入栈中当遇见右符号时从栈中弹出栈顶符号进行匹配 • 匹配成功:继续读入下一个字符
2015-05-26 20:55:48 1206
原创 【六】栈的定义及实现
1、栈的定义栈是一种特殊的线性表栈仅能在线性表的一端进行操作栈顶( Top ):允许操作的一端栈底( Bottom ): 不允许操作的一端2、栈的性质性质:后进先出(LIFO) 3、栈的顺序存储实现 3.1 代码复用 利用【一】线性表的顺序存储结构 中已经实现的线性表,实现顺序存储的栈 完整代码下载: 文件名:seqstack-1.0.tar.gz 链接: http://p
2015-05-25 20:14:33 705
原创 【五】双向链表
1、双向链表的定义 在单链表的结点中增加一个指向其前驱的p r e指针!2、数据结构的定义//dlinklist.h/* 对外做数据封装,屏蔽线性表的实现*/typedef void DLinklist;typedef struct _struct_linklistNode DLinklistNode;struct _struct_linklistNode{ DLinklist
2015-05-22 16:05:05 431
原创 【四】循环链表
1、循环链表的定义 将单链表中最后一个数据元素的next指针指向第一个元素! 2、数据结构的定义//circlelist.h/* 对外做数据封装,屏蔽线性表的实现*/typedef void Circlelist;typedef struct _struct_circlelistNode CirclelistNode;struct _struct_circlelistNode{
2015-05-22 15:47:55 565
原创 【三】静态链表
1、静态链表的定义 顺序表数组中的元素由两个数据域组成:data和next;data域用于存储数据;next域用于存储下一个元素在数组中的下标;静态链表的大小是固定的;静态链表本质上就是一个结构体数组;静态链表是在顺序表的基础上利用数组实现的单链表!2、相关数据结构定义#ifdef WIN32 typedef unsigned int LPDATA;#else typedef
2015-05-20 22:51:06 502
原创 【二】线性表的链式存储结构
1、链式存储定义为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外 ,还需要存储指示其直接后继的信息。2、链式存储逻辑结构 n个结点链接成一个链式线性表的结构叫做链表, 当每个结点中只包含一个指针域时,叫做单链表。3、链表的基本概念 表头结点 链表中的第一个结点,包含指向第一个数据元素的指针以及 链表自身的一些信息; 数据结点 链表中代
2015-05-19 16:51:27 723
原创 【一】线性表以及线性表的顺序存储结构
1、线性表的定义线性表( Li st)是零个或多个数据元素的集合线性表中的数据元素之间是有顺序的线性表中的数据元素个数是有限的线性表中的数据元素的类型必须相同2、线性表的性质 a0为线性表的第一个元素,只有一个后继 只有一个后继an为线性表的最后一个元素,只有一个前驱 只有一个前驱除a0和an外的其它元素ai,既有前驱,又有后继线性表能够逐项访问和顺序存取3、顺序存储结构线性
2015-05-18 11:01:43 754
原创 Linux/Windows 下字符编码转换
1、简介 最近的一个小项目,涉及到字符编码的转换问题,比如Windows下的多字节编码数据到Linux下后会是乱码,因为Windows下多字节编码使用的是GB2312,而Linux下默认则使用的UTF-8,下面的类就提供了该转换的实现!2、使用简介 2.1 我如何知道该类能实现哪些编码之间的转换? 因为在Linux上用到了iconv,所以要想知道该类支持哪些编码之间的转换,可以在终端中
2015-05-14 12:36:54 3037
原创 Windows WCHAR 到 Linux wchar_t 字符类型的转换
1、简介 这几天涉及到一个小项目,Windows 和Linux通过TCP进行通信,但是他们之间的字符类型上是有区别的,所有Windows上的数据发送到Linux上后,如果不经过转换,会出现乱码的情况,Windows 的WCHAR类型实际上是wchar_t,但是它只占用2个字节(既UTF-16),而Linux上wchar_t则使用的是多字节(UTF-8),下面的函数提供了他们之间的相互转换!2、程序
2015-05-14 12:05:25 4388
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人