![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 83
xyz-x
学无止境
展开
-
数据结构线性表—静态顺序表的实现
本文主要实现静态顺序表基本功能:初始化、插入(头插、尾插、任意位置插入)、删除(头删、尾删、任意位置删除,删除指定元素、删除所有指定元素)、排序(冒泡排序)、逆序、查找(二分查找)//静态顺序表结构#define MAX 100 //顺序表能存储的最大数目的元素个数typedef int DataType;typedef struct SeqList{DataT原创 2016-01-19 15:49:45 · 791 阅读 · 0 评论 -
实现一个栈,实现入栈,出栈,求最小值,时间复杂度为O(1)
题目:实现一个栈,实现入栈,出栈,求栈中最小值,时间复杂度为O(1)方案一:设计栈中元素类型为一个包含元素值和当前栈中所有元素的最小值的对象入栈时,将对象入栈,当前元素的值小于栈中最小值时,就将当前元素的最小值设为当前元素的值,保持栈顶的元素对象的最小值一直是栈中所有元素的最小值出栈时,将元素对象弹出栈中元素的最小值:栈顶的元素对象的最小值方案一缺点:每次压入栈中的元素原创 2016-04-16 23:58:32 · 6973 阅读 · 0 评论 -
对称矩阵的存储方式
对于N*N的矩阵A,对于任意i和j(N-1>i>=0 && N-1>j>=0),如果Aij=Aji那么,就称矩阵A是对称矩阵。以矩阵对角线为分界线,矩阵A分为上三角和下三角。如下图:由对称矩阵的性质,存储对称矩阵时,只需要存储对称矩阵的上三角或下三角就可以了(压缩存储),最多存储N*(N+1)/2个数据。对称矩阵和压缩存储的对应关系:下三角存储i>=j, SymmetricMat原创 2016-04-19 11:11:15 · 8216 阅读 · 0 评论 -
c++实现队列
队列的数据结构中一种特殊的线性表,特点是“先入先出,后入后出”,如下图:按照队列的特点我们可以自己实现队列,程序如下://Queue.hpp#pragma once#include#include#includeusing namespace std;templatestruct Node{ Node(const T& d) :_data(d) ,_next(原创 2016-04-13 18:44:21 · 759 阅读 · 0 评论 -
用一个数组实现两个栈
题目:用一个数组实现两个栈方案一:将数组的下标为0的位置当做第一个栈的栈底,下标为1的位置当做第二个栈的栈底,将数组的偶数位置看做第一个栈的存储空间,奇数位置看做第二个栈的存储空间。方案二:从中间分别向两边压栈将数组的中间位置看做两个栈的栈底,压栈时栈顶指针分别向两边移动,当任何一边到达数组的起始位置或是数组尾部,则开始扩容。方案三:从两边向中间压栈原创 2016-04-18 23:56:31 · 7049 阅读 · 3 评论 -
稀疏矩阵的存储方式及其快速转置的实现
稀疏矩阵:M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。如下图矩阵:稀疏矩阵的压缩存储方式:压缩存储极少数的有效数据。使用{row,col,value}三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后顺序依次存放(以便转置打印矩阵)。稀疏矩阵的转置:(1)将存储的有效数据行优先存储改为按原创 2016-04-19 14:52:59 · 5822 阅读 · 0 评论 -
广义表的创建及成员函数的实现
广义表是非线性的结构,是线性表的一种扩展,是有n个元素组成有限序列。广义表的定义是递归的,因为在表的描述中又得到了表,允许表中有表。例如:(1)A = ()(2)B = (a,b)(3)C = (a,b,(c,d))(4)D = (a,b,(c,d),(e,(f),h)) 广义表的结构:因此,广义表中包含三种节点,头节点,原创 2016-04-20 10:44:59 · 1844 阅读 · 0 评论 -
构造哈希表之开链法(哈希桶)
上一篇博客中介绍了用闭散列法的二次探测和开链法构造哈希表的原理即实现方式。构造哈希表的闭散列法之二次探测地址:http://blog.csdn.net/xyzbaihaiping/article/details/51607770这里简单描述一下哈希桶的基本原理:哈希表中保存包含每个key值的节点,每个节点有一个_next的指针,指向产生哈希冲突的key的节点#pragma原创 2016-06-08 09:50:09 · 4968 阅读 · 0 评论 -
构造哈希表之二次探测法
HashTable-散列表/哈希表是根据关键字(key)而直接访问在内存存储位置的数据结构。它通过一个关键值的函数将所需的数据映射到表中的位置来访问数据,这个映射函数叫做散列(哈希)函数,存放记录的数组叫做散列表。构造哈希表的几种方法1.直接定址法(取关键字的某个线性函数为哈希地址)2.除留余数法(取关键值被某个不大于散列表长m的数p除后的所得的余数为散列地址)3.原创 2016-06-08 01:19:00 · 77385 阅读 · 11 评论 -
验证进栈出栈的合法性
题目:给两个序列,可以用数组来存储,一个数组存放进栈的顺序,一个数组存储出栈的顺序,要求检查这两个序列是否符合进栈和出栈匹配方法:(1)用一个辅助栈,将入栈序列的第一个元素压栈,看是否和出栈序列的第一个元素相等(2)相等则将辅助栈中的元素弹出,继续比较入栈序列的下一个元素和出栈序列的下一个元素是否相等,(3)若不想等则将继续将下一个入栈序列的元素压栈并且判断它是否与出栈序列的当原创 2016-04-16 23:36:46 · 992 阅读 · 0 评论 -
两个栈实现一个队列
用两个栈实现一个队列主要需要实现的是队列的入队和出队操作。针对这一问题有以下几种方案方案一用一个栈来维护队列的出队,入队操作,具体实现方法如下:入队:将元素压入第一个栈中出队:(1)将第一个栈中的元素(除栈底元素外)依次导入第二个栈中(2)将第一个栈中剩下的那个元素弹出(3)将第二个栈中的元素依次倒回到第一个栈中方案二第一个栈管理队列的入队,第二个栈管理队列的出原创 2016-04-16 22:43:30 · 518 阅读 · 0 评论 -
两个队列实现一个栈的两种方案
我们都知道,队列的特点是“先进先出”,而栈的特点是“先入后出”。因为栈和队列插入元素的时候都是在尾部进行插入,这个所以插入操作很好解决。而队列是从队头开始删除的,栈是从栈顶删除元素,因此,我们需要考虑怎么将元素进行弹出,解决这个问题有两种方案。方案一:我们用一个队列作为主要维护栈的队列,该队列用来插入元素和弹出元素。插入元素时,将元素直接插入到第一个队列的尾部。弹出元素时:原创 2016-04-16 09:10:15 · 501 阅读 · 0 评论 -
链表常见面试题四:解决链表相交问题
问题1:判断两链表是否相交解题思路:分别遍历两个链表,到达链表末尾时判断两链表的节点是否相同,相同则两链表相交,否则不想交// 判断两个链表是否相交,假设两个链表都不带环。int CheckCross(pList list1, pList list2){ pLinkNode l1 = list1; pLinkNode l2 = list2; if (l1 == NULL || l2 ==原创 2016-04-11 20:04:10 · 295 阅读 · 0 评论 -
链表常见面试题三:解决链表带环问题
问题1:判断链表是否带环解题思路:用两个指针,快指针一次走两步,慢指针一次走一步,如果两指针相遇,那么链表带环,若两指针不相遇,则链表不带环。pLinkNode CheckCycle(pList head){ pLinkNode fast = head; pLinkNode slow = head; while (fast && fast->next) { fast = fast->原创 2016-04-11 20:04:08 · 411 阅读 · 0 评论 -
二叉树的创建及成员函数的实现
本文实现了二叉树的创建及其成员函数的实现成员函数包括:1)构造函数2)拷贝构造函数3)赋值运算符重载4)先序遍历(先根遍历)5)中序遍历6)后序遍历(后根遍历)7)层序遍历8)节点个数9)叶子节点个数10)二叉树深度二叉树的实现:#pragma once#include#include#includeusing namespac原创 2016-04-20 18:04:23 · 5736 阅读 · 0 评论 -
栈求解迷宫问题
问题:假设下图是某迷宫的地图,问此迷宫是否有一条通路求解思想:用栈来实现解决问题,主要步骤是(1)从迷宫的原创 2016-04-11 23:16:53 · 11375 阅读 · 2 评论 -
c++实现栈
栈的概念栈是数据结构中一种特殊的线性表,它的基本特性是“先入后出,后入先出”。如下图:650) this.width=650;" title="图片1.png" alt="wKiom1cJJX6QZftdAAAd2u7FNBg489.png" src="http://s5.51cto.com/wyfs02/M02/7E/D1/wKiom1cJJX6QZftdAAAd2u7FNBg489.png"原创 2016-04-11 20:04:46 · 366 阅读 · 0 评论 -
数据结构 线性表—单链表
本文只要实现单链表的初始化、插入(尾插、头插、任意位置插入)、删除(尾删、头删、删除指定元素)、查找等。定义单链表typedef int DataType;typedef struct LinkNode{ DataType data; struct LinkNode *next;}LinkNode, *pLinkNode, *pList;实现单链表的所有接口:void InitLinkL原创 2016-04-11 20:04:00 · 306 阅读 · 0 评论 -
链表常见面试题一:基本问题
本文列举出了7个链表常见的面试题,其他面试题请阅读下一篇博客 面试题1:删除非尾节点删除非尾节点,只告诉一个当前节点的位置,将该位置的节点删除。解题思路:删除该位置的节点,由于我们不知道它的前一个节点的位置,不能直接将它的前一个节点与它的后一个节点连接起来。因此,我们需要用另一种方法:将该节点的后一个节点的元素赋值给该节点,然后删除该节点的后一个节点。650) this.width=650;" t原创 2016-04-11 20:04:02 · 380 阅读 · 0 评论 -
链表常见面试题二:约瑟夫环
面试题1:约瑟夫环约瑟夫环故事背景:著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Jo原创 2016-04-11 20:04:05 · 485 阅读 · 0 评论 -
二叉树中两个节点的最近公共祖先节点
题目:求二叉树中两个节点的最近公共祖先节点一、该二叉树为搜索二叉树搜索二叉树的特点:任意一个节点的左子树的所有节点值都比该节点的值小,其右子树的所有节点值都比该节点的值大。解决该问题方法:从树的根节点开始和两个节点作比较,如果当前节点的值比两个节点的值都大,则这两个节点的最近公共祖先节点一定在该节点的左子树中,则下一步遍历当前节点的左子树;如果当前节点的值比两个节点的值都小原创 2016-08-04 23:43:47 · 53480 阅读 · 11 评论