lin20080410的专栏

从站在巨人的肩上,向成为巨人迈进... 互相学习!

排序:
默认
按更新时间
按访问量

数据结构系列-队列的基本操作

队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的端是队尾,允许删除的端是队头。所以说队列是一个先进先出的线性表,相应的也有顺序存储和链式存储两种方式。顺序存储就是用数组实现,比如有一个n个元素的队列,数组下标0的一端是队头,入队操作就是通过数组下标一个个顺序...

2018-03-19 23:41:27

阅读数:47

评论数:0

数据结构系列-链栈的基本操作

栈的链式存储结构,可以称为链栈。针对单链表的链栈,栈顶指针就是头指针。对于链栈来说,不存在栈满的情况,当然是内存足够的情况下。对于空栈来说就是top =NULL。相对的顺序栈要实现确定一个固定的长度,但是顺序栈存取时的定位很简洁。链栈对于长度没有限制,但是每个元素要多个指针域,也就多了一些内存开销...

2018-03-15 23:31:09

阅读数:49

评论数:0

数据结构系列-顺序栈的基本操作

栈(Stack)是限定只能在表尾部进行插入、删除的线性表。也称后进先出的线性表。允许执行插入、删除的那一端成为栈顶,另一端就是栈底,因为只能在栈顶执行操作,所以他是一种特殊的线性表。既然栈是特殊的线性表,也会有顺序存储和链式存储。对于栈的顺序存储,就是用数组来实现,将下标0的一端作为栈底,因为首元...

2018-03-15 22:34:06

阅读数:30

评论数:0

数据结构系列-线性表的链式存储及基本操作

线性表的链式存储,是用一组任意的单元存储线性表的数据元素,这组单元可以连续,也可以不连续。每个链表元素除了要存储数据信息,还要存储它的后继元素的存储地址,也就是它的数据域、指针域。通常在单链表的第一个结点前附加一个结点,成为头结点,头结点的数据域可以不存储任何信息,也可以存储链表长度等附加信息,头...

2018-03-11 21:06:15

阅读数:53

评论数:0

数据结构系列-线性表的顺序存储及基本操作

程序设计就是对一个确定的问题,选择一个合适的结构来表示,然后通过好的算法去实现,所以说数据结构、算法是很重要的基础。顺序存储的线性表,在查找指定位置元素时非常快,时间复杂度是O(1),但是删除、插入元素时可能要移动元素导致效率变慢,时间复杂度可能是O(n),还有一个问题就是存储空间容量要事先确定的...

2018-03-11 10:39:26

阅读数:31

评论数:0

求最大连续子序列的和

给出一个序列,求出最大连续子序列的和,并输出最大连续子序列。如:{-10, 1, 2, 3, 4, -5, -23, 100, 3, 7, -21},最大子序列是100,3,7,和是110.public class MaxSubSumDemo { public static void main...

2018-02-24 19:28:39

阅读数:31

评论数:0

字符串排列,for循环嵌套递归

字符串的排列,就是给定一个字符串abc,输出能排列出的所有的字符串,如:abc,acb,bac,bca,cba,cab,写这个算法主要是想练习for循环中嵌套递归是怎么执行的,其实单纯的递归算法还是相对好理解的,你想找一个问题的递归算法,就是先把问题分成更小的子问题,并且这个分割还要是有限的,得有...

2017-09-10 22:55:23

阅读数:211

评论数:0

环形链表,约瑟夫问题,(7)

一个经典的环形链表问题,有1,2,3,,,,n这些数字排成一个圆圈,从1开始每次删除第m个数字,求出这个圆圈中最后的数字。当然也可以说先从数字k开始,数到m删除这个数字,然后就从1开始,数到m删除这个数字,原理是一样。 这里是从1开始,数到m删除这个数字。 其实一个单向非循环链表也是可以模拟这个应...

2017-09-04 22:36:31

阅读数:129

评论数:0

链表合并(6)

有两个递增排序的链表,把他们合并后的节点仍然是递增排序的。 这个问题的思路比较简单,首先比较p1,p2头结点,把较小的节点(比如是p1)赋值给mergeHead节点,然后,把p1->Next跟p2比较,以此类推,每次比较两个节点,所以这里可以考虑用递归。 #include #include...

2017-09-03 14:43:06

阅读数:99

评论数:0

反转链表,(5)

实现链表的反转,比如原来是 1->2->3->4->5;翻转后就是 5->4->3->2->1,

2017-09-03 12:49:11

阅读数:70

评论数:0

从尾部查找一个单向链表的第几个节点。(4)

给定一个单向链表,查找出从尾部开始的第k个节点,也就是倒数第k个节点,这里假定是从1开始计数的,即尾节点是第一个节点。 如图,假如要查找的是倒数第3个节点,一种思路就是从头结点开始遍历,遍历到尾部,得出链表的长度n,然后再从头开始遍历到 n-k+1个节点,就是倒数第k个,这么做要遍历链表两次。 ...

2017-09-02 21:42:52

阅读数:110

评论数:0

用O(1)时间,删除一个链表节点(3)

有这样一个问题,给定一个单向链表的头结点pHead和要删除的节点pDeleted,但是要求在O(1)时间完成。 可能先想到的就是从头结点往前遍历,找到要删除的节点pDeleted,这样就知道了它的前后节点,但是这样的时间是O(n)。 这里的思路是: 把pDeleted的下一个节点pNode1的值赋...

2017-08-31 22:52:32

阅读数:147

评论数:0

反方向打印链表。(2)

给出一个链表的头节点,从尾部逆序打印链表。 这里有2中实现思路,一种是用stack,先从头节点开始,依次把链表节点入栈,然后再依次弹出。 第二种思路是递归,实际递归的本质也是用栈来实现的。 #include #include #include "ListCommon.h"...

2017-08-28 22:56:12

阅读数:124

评论数:0

链表基本操作的函数实现。(1)

如下是一个模拟的链表的基本操作,主要有创建链表,连接链表,打印链表,删除链表等,后面有关链表的算法都依赖这个文件中函数实现。 ListCommon.h //链表的结构 struct ListNode{     int m_nValue;     ListNode* m_pNext; }; /...

2017-08-28 22:48:22

阅读数:222

评论数:1

用两个栈实现一个队列算法

栈:后进先出,队列:先进先出。 用两个栈实现一个队列,主要实现队列中的两个函数,appendTail,尾部追加,deleteHead,在头部删除节点, 用了一个模板类,队列的元素可以是任意类型,int,char都可以,其中类模板中构造函数,析构函数,appendTail,deleteHead的...

2017-08-27 12:20:16

阅读数:108

评论数:0

一个字符替换的算法

给定一个字符串把其中的空格替换成 (%) 这3个字符。 #include using namespace std; void strRepace(char chArray[], int maxLen){     if(chArray == NULL)         return ; ...

2017-08-26 22:05:52

阅读数:91

评论数:0

使用位运算 的2个算法

1,不用临时变量,交换两个值: #include using namespace std; void swapValue(int num1,int num2){ //通过亦或运算符^,交换两个值,不适用临时变量, 第一步:num1 = num1^num2,num2=num2^num1,相当于n...

2017-08-26 11:46:31

阅读数:99

评论数:0

哈希表,找出第一个出现一次的字符

在一个字符串中,找出第一个出现一次的字符, 把每个字符做为hash表中的key,出现的次数做为对应的值。 #include using namespace std; char getFirstNotRepeatChar(const char *pStr){     if(pStr == N...

2017-08-24 22:16:10

阅读数:93

评论数:0

二分法 -算法

二分法查找,这个算法要求数据要是有序的。 比如有这样的问题:找出一个数组中,两个数的和小于等于15,然后输出他们,否则就单独输出较大的数。 #include using namespace std; void binarySearch(int *array, int length){     ...

2017-08-23 22:49:46

阅读数:173

评论数:0

字符转整数 算法

把一个字符串转成整数: #include using namespace std; long long strToInt(const char* str) {     long long num = 0;     bool minus = false;     cout     if(str...

2017-08-22 23:00:45

阅读数:130

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭