数据结构
铁桶小分队
这个作者很懒,什么都没留下…
展开
-
队列的实现(2):用链表实现队列
上一篇文章: http://blog.csdn.net/keheinash/article/details/51125063 利用数组实现了循环队列,这是静态的队列,缺点是需要预设大小,当队列满时,无法再插入新的数据,只有等队头的数据被取走以后才能往队列放入新的数据。还可以利用链表实现队列,这种方式动态创建节点需要的内存,当有新的数据节点要加入时,才去申请内存空间,不需要预设大小,整个队列需要的原创 2016-04-13 15:03:51 · 5109 阅读 · 0 评论 -
排序算法--选择排序之简单选择排序
在待排序记录中,选择一个最小的数,和第一个记录交换位置,在剩下n-1个的记录中选择最小的和第二个记录交换,依次类推,最终可以得到一个有序的序列。代码:#include <string.h>#include <malloc.h>#include <iostream>using namespace std;void printArray(int a[], int n){ for(int j=原创 2016-12-09 16:25:01 · 642 阅读 · 0 评论 -
排序算法--插入排序之希尔排序
希尔排序是对直接插入排序算法的改进,把整个序列分割为若干子序列,对每个子序列进行直接插入排序,最后对整个序列进行直接插入排序(因为经过前面的子序列排序,整个序列基本有序,最后进行一次直接插入排序效率会比一开始就做排序高)。如果掌握了直接插入排序,那么希尔排序也比较容易理解了。就是划分好子序列后,直接复用直接插入排序的代码。代码:#include <string.h>#include <malloc原创 2016-12-09 16:15:18 · 421 阅读 · 0 评论 -
排序算法--插入排序之直接插入排序
直接插入排序的核心思想是把一个记录插入一个有序序列中,每插入一个记录就得到一个新的有序序列,直到所有记录都插入成功,得到有序序列。每次插入记录时的有序序列如何得到,关键在第一次,第一次要插入的记录时序列的第二个值,有序序列只有一个值,就是第一个记录。代码:#include <string.h>#include <malloc.h>#include <iostream>using namespac原创 2016-12-09 15:46:48 · 438 阅读 · 0 评论 -
用哈希表判断两个单链表是否相交的问题
判断两个单链表是否相交,一般有下面几种方法: 1.遍历第一个链表,记录每次获得的节点地址,然后遍历第二个链表,看记录的节点地址是否存在第二个链表中,这种方法的时间复杂度为O(n^2)。2.对第一个链表的每个节点地址构造哈希表,然后遍历第二个链表,查找当前节点是否存在哈希表中,此方式的时间复杂度为O(len1+len2)。3.将其中一个链表首尾相接,遍历另一个链表,如果能达到首尾相接链表的头,说明两原创 2016-06-16 20:26:23 · 1645 阅读 · 0 评论 -
队列的实现(1):循环队列的实现
队列是一种“先进先出的数据结构”,可分为静态队列和链式队列。静态队列一般使用数组实现,数组需要预先定义内存大小,为了避免内存浪费,一般使用循环队列。接下来讲述循环队列的原理以及实现代码。循环队列数据结构定义: int front;//指向队列头,指向第一个数据节点 int rear;//指向队列尾(并不是指向最后一个数据节点,而是最后一个数据节点后面的位置) char data[];//节点数原创 2016-04-11 20:11:33 · 3668 阅读 · 0 评论 -
编程实现打印出26个字母的所有子集
一看到这道题可能没有什么思路,那么先从字母比较少数 的情况开始观察:假设只有A B C三个字母,那么他们的所有子集是什么? {A},{B},{C},{A,B},{A,C},{B,C},{A,B,C},空集根据上面的列举我们可以画出下面的表: A B C 1 0 0 0原创 2016-07-16 11:51:33 · 2796 阅读 · 0 评论 -
把两个从大到小的有序链表合并成一个链表,新的链表是一个从小到大的有序链表
实现一个函数,把两个从大到小的有序链表合并成一个链表,新的链表是一个从小到大的有序链表。这道题可以分成两个思路: 1.先把两个链表合并成一个链表,合并后的链表从大到小排序 2.将链表逆置,得到从小到达排序的链表链表合并最粗暴的方法,遍历第一个链表的节点,和第二个链表的每一个节点比较,找出最小者作为链表的新节点插入,这个方法的时间复杂度为O(len1*len2)。由于两个链表是有序的,因此我们可以原创 2016-07-16 22:59:16 · 16436 阅读 · 0 评论 -
以队列的形式使用共享内存
共享内存允许多个进程使用某一段存储区,数据不需要在进程之间复制,多个进程都把该内存区域映射到自己的虚拟地址空间,直接访问该共享内存区域,从而可以通过该区域进行通信,是一种速度很快IPC。下面是共享内存映射图一般描述使用共享内存,都是以普通缓冲区的形式访问,这里除了讲述共享内存的原理和使用方法,还会实现用队列的方式使用共享内存。创建共享内存int shmget(key_t key, size_t si原创 2016-05-14 17:22:07 · 4625 阅读 · 2 评论 -
利用单链表实现栈
栈是一种仅限于在头尾操作的数据结构,和队列相反,栈的特点是“现金后出”,因此又称为LIFO。和队列一样,栈也有链表和数组两种实现方式,各自的优缺点和介绍队列时提到的基本相同。以下介绍使用链表实现栈的方式(链式栈)。下面是链式栈的示意图:因为栈的特点是“先进后出”,因此我们只需要一个指针指示栈顶即可,因为无论插入或者删除都是针对顶部的节点而已,也就是说,我们需要实现一个“头节点”会变化的链表,并且每次原创 2016-04-15 18:40:57 · 4789 阅读 · 0 评论 -
找出给定字符串中第一个不重复的字符
给定一串字符串,找出其中第一个不重复的字符。 如:输入”abcddcaeb1~soop”,输出’e’方法一思路:定义一个list<char> recd,对输入字符串str进行遍历,分别查找每个字符是否出现在recd中,如果存在,则把recd中的该字符删除,如果不存在,则将该字符放进recd中。即用recd存放字符串中只出现了一次的字符。那么当遍历完str后,recd的第一个元素就是我们要找的字符,原创 2016-07-26 20:10:37 · 7169 阅读 · 0 评论