
Data Structure(C/C++)
life is wonderful
pay for life, pay for yourself
展开
-
DS之何谓数据结构
何谓数据结构? 数据结构是计算机存储、组织数据的方式,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。这是百度解释的数据结构定义。暂且不说理解起来有没有难度,就说数据结构到底是什么东西?恐怕至今还没有一个权威的解释,数据结构的内容也是一直在扩展。学了一段时间了,也不知道数据结构到底是什么?有一个解释我还是蛮理解的:数据结构是在整个计算机科学与技术领域上广泛被使用的术语。原创 2015-03-24 16:20:18 · 7311 阅读 · 0 评论 -
DS之单链表
单链表概述 线性表的顺序表的优点是随机存取表中的任意元素,但是它的缺点也是明显的,那就是在进行基本操作中的向顺序表中插入和删除数据元素时需要移动大量的元素。因此产生线性表的另一种链式存储结构,也就是单链表。它没有顺序表的弱点,但是也失去了顺序表的优点。 线性表的链式存储结构的特点是用一组任意的存储单元线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示原创 2015-04-29 21:39:58 · 1412 阅读 · 0 评论 -
DS之链队
链队概述 用链式表示的队列简称链队。一个链队列显然需要两个分别指示队头和队尾的指针(分别称为头指针和尾指针)才能唯一确定。为了操作方便,我们像给线性表的单链表的添加头结点那样也给链队列添加一个头结点,并令头指针指向头结点。因此,空的链队列的判决条件为头指针和尾指针均指向头结点。 链队列的操作即为单链表的插入和删除操作图解 元素x原创 2015-05-07 20:08:22 · 1104 阅读 · 0 评论 -
DS之树
树型结构是一类非常重要的非线性数据结构,其中以树和二叉树最为常用,直观看来,树是以分支关系定义的层次结构。 树的定义 树(Tre)e是n(n>=0)个结点的有限集。在任意一棵非空树中: (1)有且仅有一个特定的称为根(Root)的结点。 (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每一个原创 2015-05-15 19:57:25 · 948 阅读 · 0 评论 -
DS之遍历二叉树
在二叉树的一些应用中,常常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理。这就提出了一个遍历二叉树的问题,即如何按某条搜索路径巡访树中的每个结点,使得每个结点均被访问一次,而且仅被访问一次。 由二叉树的递归定义可知,二叉树是由三个基本单元构成的:根结点,左子树和右子树。若能依次遍历这三部分,便是遍历了整个二叉树。若限定先左后右的顺序,则遍历二叉树通常有三种算法原创 2015-05-16 14:47:34 · 1463 阅读 · 0 评论 -
DS之求解二叉树的叶子结点和深度
这一次需要用到的是二叉树的相关知识,具体的解释会在后面的博客讲述。 如果实现上面的功能就先要构造二叉树以及创造二叉树,还需要求解叶子结点个数函数以及深度函数,这都需要自己去在数据结构的要求中实现。 首先来看二叉树的二叉链表的存储表示:typedef struct BiTNode//重新定义二叉树的二叉链表的结构{ TElemType data;原创 2015-05-15 23:09:13 · 1552 阅读 · 0 评论 -
DS之二叉树
二叉树是另一种树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。 二叉树可以分为5种基本形态: (1)空二叉树。 (2)仅有根结点的二叉树。 (3)左子树为空的二叉树。 (4)右子树为空空的二叉树。 (5)左,右子树均为非空原创 2015-05-16 12:21:49 · 1444 阅读 · 0 评论 -
数据结构习题之树
第六章树 一、基本要求、重点、难点本章目的是介绍二叉树的定义、性质、存储结构、遍历,树的定义、存储结构、遍历、树和森林与二叉树的转换,哈夫曼树等内容。本章重点是掌握二叉树的遍历算法及有关应用。难点是使用本章所学到的有关知识设计出有效算法,解决与树或二叉树相关的应用问题。二、考核目标、考核要求1.树的概念,要求达到“理解”层次1.1树的逻辑结构原创 2015-07-03 13:13:31 · 4451 阅读 · 0 评论 -
数据结构习题之多维数组和广义表
第五章 多维数组和广义表一、基本要求、重点、难点 本章目的是介绍多维数组的逻辑结构特征及其存储方式,特殊矩阵和稀疏矩阵的压缩存储方法。本章重点是熟悉多维数组的存储方式、矩阵的压缩存储方式,难点是稀疏矩阵的压缩存储方示下实现的算法。二、考核目标、考核要求1.多维数组,要求达到“理解”层次1.1多维数组的逻辑特征。1.2多维数组的顺序存储结构及地址计原创 2015-07-01 15:45:33 · 3949 阅读 · 0 评论 -
数据结构习题之绪论
第一章概论 一. 基本要求重点、难点对本章的学习,主要是要熟悉各名词和术语的含义;掌握各种基本概念,特别是数据结构的逻辑结构、存储结构、数据运算3方面的内容及这3方面的相互关系;熟悉C语言的书写规范,理解算法的5个要素的确切含义,即有穷性、确定性、可行性及有输入、有输出,从而掌握计算语句频度和估计算法时间复杂度的方法等,为学习数据结构打下基础。二. 考核原创 2015-06-25 21:45:48 · 1995 阅读 · 0 评论 -
数据结构习题之线性表
第二章线性表 一. 基本要求、重点、难点 本章主要介绍线性表的逻辑结构和各种存储表示方法,以及定义在逻辑结构上的各种基本运算及其在存储结构上如何实现这些基本算法。本章的重点是熟练掌握顺序表(即线性表的顺序存储)和单链表上实现各种基本算法以及相关的时间复杂度分析,难点是能够使用本章所学到的基本知识设计有效算法,解决与线性表相关的应用问题。 二.原创 2015-06-26 16:27:04 · 7029 阅读 · 0 评论 -
DS之链表实现就地逆置
链表实现数据元素逆置是一个很常用的实例,在顺序表实现输入数据逆置那篇博客需要额外的一个逆置函数,在主函数中实现逆置还需要调用逆置函数。这一篇就全部用链表的知识来实现就地逆置并且输出逆置后的数据元素。 先要构建一个带头结点的单链表,再来重新定义结点类型,在主函数中实现就地逆置的代码为:#include using namespace std;#include #includ原创 2015-05-08 21:11:42 · 1323 阅读 · 0 评论 -
DS之栈实现数制转换(补充)
在计算机进制转换的时候,最常用的就是二进制,八进制,十进制,和十六进制,以及它们之间的转换。而在现实生活中最常用的十进制数是我们一贯的作风。在计算机系统最常用的是二进制,十六进制,八进制。 在上一次使用顺序栈实现进制转换的时候,一直在考虑十六进制的问题,最终也没有实现,就收手了。过了一天,再次尝试着看代码,也问了好多的同学,都不会,他们所做的只是进行十进制以下的进制转换,我考虑的十六原创 2015-04-17 21:42:17 · 1477 阅读 · 2 评论 -
DS之算法概述
算法 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一原创 2015-03-29 20:48:27 · 5176 阅读 · 0 评论 -
DS之顺序表实现归并两个非递减线性表
早在写线性表的时候就说过这个复杂的操作,今天就来实现归并。 已知顺序表La和Lb中的数据元素按值非递减有序排列,现要求将La和Lb归并为一个新的顺序表Lc,且Lc中的数据元素扔按值非递减有序排列。 例如:La=(3,5,8,11) Lb=(2,6,8,9,11,15,20) 则 Lc=(2,3,4,原创 2015-04-18 18:25:52 · 2621 阅读 · 1 评论 -
DS之线性表
线性表的定义 线性表是最常用且最简单的一种数据结构,一个线性表是n个数据元素的有限序列。至于每个数据元素的具体含义,在不同的情况下各不相同,它可以是一个数或一个符号,也可以是一页书,甚至其他更复杂的信息。 自稍微复杂的线性表中,一个数据元素可以由若干个数据项组成。在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称为文件。 例如下图就是原创 2015-04-18 10:58:05 · 1165 阅读 · 0 评论 -
DS之顺序栈和链队实现回文判断
顺序栈和链队的基本操作就不再一一列举了,要想实现回文判断,先来了解什么是回文?“回文”一字符串正着读和反着读是相同的字符序列,如“abcba”,"abba"为"回文",“abab”则不是“回文”。 其次就是顺序栈和链队如何实现回文的判断?将输入的字符串依次入栈和入队,然后再依次出栈和出队,由于入栈和入队是相同的序列,然而出栈和出队是相反的序列,这就实现了回文的判断。原创 2015-04-17 18:25:17 · 3127 阅读 · 3 评论 -
DS之顺序栈
顺序栈的基本操作0基本操作前的准备#include using namespace std;//两个C语言的头文件库#include #include //以下是宏定义#define OK 1#define ERROW 0#define OVERFLOWE -2#define TRUE 1#define FALSE 0#define INFEASIBLE -1#de原创 2015-04-14 19:11:13 · 866 阅读 · 0 评论 -
DS之栈
对于栈的理解,早就在上C++课的时候,程老师就给我们做过简单的介绍和使用,今年接触了数据结构这本书,有了一个全面的学习,不得不说是一本很难啃的一本书,但是为了写出更好的程序代码,这门课是在所难免的。 在数据结构中,栈是一类重要的抽象数据类型。从数据结构角度看,栈也是一种线性结构,属于线性表,其特殊性在于栈的基本操作是线性表操作的子集,它是操作受限的线性表。从数据类型角度看,它和线原创 2015-04-13 21:42:35 · 961 阅读 · 0 评论 -
DS之栈实现数制转换
栈的基本操作在上一篇已经提到,这里就不做详细的说明了。 要想实现对于一个非负十进制整数转换为不大于十进制的数的方法有很多,其中一个基于栈的先进后出的固有特性实现的。在进行进制转换的过程中,由于基于公式:N=(N div d)*d+N mod d(其中:div为整除运算,mod为求余运算)的计算过程是从低位到高位顺序产生所要转换进制数的各个数位,而输出的时候是按从高位到低位进行,恰好原创 2015-04-15 18:42:06 · 1559 阅读 · 0 评论 -
DS之顺序表
顺序表定义 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构或顺序映像通常被叫做顺序表。顺序表的特点为:以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。每一个数据元素的存储位置都和线性表的起始位置相差一个和数据元素在线性表中的位序成正比的常数。因此,只要确定了存储线性表的起始位置,线性表中任一数据元素都可以随机存取,原创 2015-04-18 16:16:25 · 1100 阅读 · 0 评论 -
DS之顺序表实现输入数据逆置
实现输入数据逆置和顺序表实现排序是两个极其相似的过程,因此使用的顺序表的基本操作也是一样的:0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素。 要想实现输入数据元素的逆置还需要一个逆置函数,逆置函数在C++,C#语言中早已接触过,因此不陌生,记得在做大量的C++的程序代码补充的大题就写过不下数十遍,挺简单的掌握技巧,就是你输入数据的个数的一半,前后进行交换,因此逆置函数原创 2015-04-21 13:35:41 · 2130 阅读 · 0 评论 -
DS之顺序表实现乱序输入顺序输出
顺序表的实例有很多,在学其他的编程语言时,肯定都学过要求输入一串乱序的数字,要求进行排序,实现升序或降序输出。今天就来用顺序表实现乱序输入,顺序输出(升序)。 实现上述的功能需要用到的顺序表的基本操作有0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素。自己只需写一个排序的函数,排序函数的代码为://排序函数void paixu(SqList &L){ f原创 2015-04-20 19:55:52 · 1988 阅读 · 0 评论 -
数据结构习题之栈和队列
第三章 栈和队列 一. 基本要求、重点、难点本章的目的是介绍栈和队列的逻辑结构定义及在两种存储结构上如何实现栈和队列的基本运算。要求在掌握栈和队列的特点的基础上,懂得在什么样的情况下能够使用栈或队列。本章重点是掌握栈和队列在两种存储结构上实现的基本运算,难点是循环队列中对边界条件的处理。二. 考核目标和考核要求要求达到识记层次的有:栈和队列的原创 2015-06-27 15:46:24 · 6393 阅读 · 3 评论