
数据机构
LiuBo_01
这个作者很懒,什么都没留下…
展开
-
数据结构:使用栈和队列相关知识打印杨辉三角
利用数据结构队列知识编程实现打印杨辉三角。原创 2017-10-09 21:19:28 · 4447 阅读 · 1 评论 -
数据结构中的基础概念
数据:数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。 数据包括:整形、实型、布尔型、图像、声音、字符等等。数据元素:数据元素是组成数据的基本单位,是数据集合的个体; 数据对象:数据对象是性质相同的数据元素的集合,是数据的一个子集。如字符集合C={‘A’,’B’,’C,…} 。 数据项:一个数据可以由一个或多个数据项组成,数据项是对客观事物某一方面特性的数据描述,是...原创 2018-05-02 21:24:23 · 703 阅读 · 0 评论 -
不带头结点的链表的基本操作
与带头结点的单链表相比,不带头结点的单链表没有头结点,可以简单的理解为,带头结点的单链表的的头结点一般数据域不存元素,指针域指向第一个结点,头指针(假设为pHead)指向头结点,而不带头结点的单链表,头指针指向单链表的第一个结点,如果把链表中的结点进行编号,带头结点的链表的头结点可以理解为是其第0个结点,头指针pHead指向头结点即第0个结点,不带头结点的指针指向第1个结点。 带原创 2018-05-09 16:56:26 · 3899 阅读 · 0 评论 -
栈的应用:一个简单行编辑程序
一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上输入时,不能保证不出差错,因此,若在编辑行中,“每接受一个字符,即存入用户数据区”的做法显然是不恰当的。较好的做法是,设立一个输入缓冲区,用于接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时,及时更正。例如,当用户...原创 2018-04-25 15:56:03 · 4668 阅读 · 0 评论 -
数据结构:顺序表的基本操作
线性表的顺序存储顺序表的线性存储示意图C语言定义线性表的顺序存储结构线性表的顺序存储 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表在逻辑结构上相邻的元素存储在连续的物理存储单元中,即:通过数据元素物理存储的连续性来反应元素之间逻辑上的相邻关系。采用顺序存储结构存储的线性表通常简称为顺序表。 顺序存原创 2018-05-03 22:50:05 · 107670 阅读 · 21 评论 -
回文判断。称正读与反读都相同的字符序列为回文序列
试写一个算法,判断依次读入的一个以@为结束符的字符序列,是否为形如“序列1&序列2”模式的字符序列。其中序列1和序列二都不含字符“&”,且序列2是序列1的逆序列。例如,"a+b&b+a"是属该模式的字符序列,而"1+3&3-1"则不是。 通过栈与队列相关内容的学习,我们知道,栈是"先进后出"的线性表,而队列是"先进先出"的线性表。可以通过构造栈原创 2018-05-25 00:23:19 · 19415 阅读 · 10 评论 -
链表逆置和从尾到头打印单链表
        链表的逆置和链表从尾到头打印是两个不同的概念,链表的逆置就是将链表(a1,a2,a3…an)转化为(an,a(n-1),..a1),链表结构会发生改变;而从尾到头打印链表是将链表中的元素逆序打印,即从尾结点开始依次打印,链表的结构不发生改变。    &nbsp原创 2018-05-16 00:04:52 · 1924 阅读 · 2 评论 -
数据结构:顺序表、单链表、栈和队列的简单总结
首先,顺序表、链表、栈和队列都属于线性表,都可以采用两种基本的存储结构:顺序存储结构和链式存储结构来存储。结构中的元素之间存在一对一的线性关系。既然,顺序表、链表、栈和队列都属于线性表,那么有必要简单的谈一谈线性表。 线性结构是最常用、最简单的一种数据结构。而线性表是一种典型的线性结构。其基本特点是线性表中的数据元素是有序且是有限的。在这种结构中:① 存在一个唯一的被称为“第一个...原创 2018-06-02 19:51:00 · 11846 阅读 · 1 评论 -
设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)
问题:设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1) 详细描述这一过程: //删除链表中pDel指向的结点void Delete(LinkList* pHead, Node* pDel){ Node* ...原创 2018-05-16 10:42:45 · 2888 阅读 · 0 评论 -
队列的基本操作(顺序队列、循环队列、链式队列)
        队列也是一种线性表,是一种先进先出的线性结构。队列只允许在表的一端进行插入(入队)、删除(出队)操作。允许插入的一端称为队尾,允许删除的一端称为队头。        队列的基本操作包括: 初始化队列:InitQueue(Q)   &原创 2018-05-23 01:17:35 · 50592 阅读 · 18 评论 -
数据结构:不带头结点的链式队列的实现
/*----------------------------------------------------------------* 设立一个队首指针front ,一个队尾指针rear ,分别指向队首和队尾元素。* ◆ 初始化:LQ->front = LQ->rear = NULL;将队列的尾指针和头指针置空,* 由于不带头结点,所有不需要为头结点开辟空间* ◆ 判断队列是...原创 2018-05-23 11:25:11 · 7247 阅读 · 0 评论 -
删除单链表中的倒数第k个结点
算法思想:定义两个指针,pFast和pSlow,都指向头结点,pFast先后移k-1位,使pFast指向第k个结点,此时pSlow就是相对pFast的倒数第k个结点。然后同时后移,当pFast走到表尾时,pSlow正好指向倒数第k个结点。然后将pSlow指向的结点删除。 删除单链表中的倒数第k个结点,首先要确定倒数第k个结点的位置。//查找指向链表中的倒数第k个结点的指针...原创 2018-05-16 20:36:00 · 2442 阅读 · 0 评论 -
数据结构:单链表的基本操作
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。这组存储单元可以是连续的,也可以是不连续的。链表中的数据是以结点来表示的,一个结点包含数据域和指针域,数据域用来存储结点的值,指针域用来存储数据域的直接后继的地址,单链表结点的而结构如下图: 一般情况下使用链表只关心链表中结点之间的逻辑关系,并不关心链表的每个结点的实际存储位置,通常用箭头来表示链域原创 2018-05-07 19:57:40 · 6267 阅读 · 1 评论 -
栈的应用:括号匹配检验
输入包含括号的表达式,包含3中括号:圆括号(),方括号[],大括号{};其嵌套顺序随意,即()或{{()[]}}等均为正确的输入格式,检验输入表达式中的括号是否匹配。源代码:BracketMatch.h#ifndef __BRACKETMATCH_H__#define __BRACKETMATCH_H__#define MAXSIZE 100typedef char DataType;type原创 2018-04-23 11:39:03 · 1838 阅读 · 1 评论 -
数据结构:链式栈的基本操作
采用链式存储的栈称为链式栈或者链栈,采用单向链表实现,链栈由一个个结点构成,结点包括数据域和指针域两部分。数据域存放链栈中的元素,指针域表示元素之间的关系。插入和删除元素的一端称为栈顶,栈顶由栈顶指针top指示,带头结点的链栈,栈顶指针top始终指向头结点,头结点的指针始终指向链栈的第一个结点。与顺序栈相比,链栈的结点空间可以动态申请,因此,不...原创 2018-04-18 15:53:25 · 10945 阅读 · 4 评论 -
数据结构 顺序查找(算法思想和源代码)
算法思想:在表的一端设置一个称为“监视哨”的附加单元,存放要查找元素的关键字,从表的另一端开始查找,如果在“监视哨”找到要查找元素的关键字,返回失败信息,否则,返回相应下标。原创 2017-10-19 20:24:34 · 6934 阅读 · 0 评论 -
数据结构 折半查找法(算法思想和源代码)
算法思想: 首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上步骤,直到找到满足条件的结果为止,若找不到,则返回失败。原创 2017-10-19 20:46:12 · 18711 阅读 · 1 评论 -
数据结构 二叉排序树的创建、查找、删除
源代码:#include#include typedef struct Node{int key;struct Node* Lchild;struct Node* Rchild;}BSTNode,*BSTree; void InsertBST(BSTree *root, int key) //二叉树插入的递归算法{if (*root == N原创 2017-10-21 14:57:05 · 691 阅读 · 0 评论 -
数据结构 直接插入排序
直接插入排序是一种最基本的插入排序方法,其基本操作方法是将第i个记录插入到第i-1 个已经排好序的记录中。具体过程为:将第i个记录的关键字Ki,顺次与其前面记录的关键字K (i-1) 、K(i-2)、K(i-3),...K1 经行比较,将所有关键字大于Ki 的记录依次向后移动一个位置,直到遇到一个关键字小于或者等于Ki的记录 Kj,此时Kj后面必为空位置,将第i 个记录插入空位置即可。完整的直接插入排序是从 i=2 开始的,也就是说,将第一个记录视为已排好序的单元素子集合,然后,将第二个记录插入到单元素子集原创 2017-10-21 16:35:14 · 791 阅读 · 0 评论 -
数据结构 折半插入排序
从关于查找的讨论中可知,对有序表进行折半查找,其性能优于顺序查找。所以可以将折半查找思想用于在有序记录r[1, ...,i-1]中确定应插入的位置,相应的排序法称为折半插入排序法。折半插入排序是对直接插入排序算法的改进,在插入某记录时,采用折半查找的方法确定插入的位置。原创 2017-10-22 13:27:21 · 1720 阅读 · 0 评论 -
数据结构 冒泡排序
冒泡排序是一种相对简单并且容易理解、容易实现的一种排序算法。其基本思想是:依次比较相邻的两个数,若想相邻的两个数逆序,则交换位置。原创 2017-10-30 18:32:02 · 625 阅读 · 1 评论 -
数据结构 希尔排序
希尔排序的算法思想:先将待排序列分割成若干个“较稀疏的”子序列,分别进行直接插入排序。经上述粗略调整,整个记录中的序列已经基本有序,最后再对全部序列进行一次直接插入排序原创 2017-10-30 18:24:02 · 1160 阅读 · 0 评论 -
数据结构 简单选择排序(C语言实现)
选择排序的基本思想:每一趟在n-i+1(i=1,2,3,…,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。原创 2017-11-02 17:49:10 · 2737 阅读 · 0 评论 -
随机生成30个数,试比较直接插入排序、简单选择排序、冒泡排序、快速排序、堆排序和希尔排序的时空性能和稳定性。
随机生成30个数,试比较直接插入排序、简单选择排序、冒泡排序、快速排序、堆排序和希尔排序的时空性能和稳定性。原创 2017-11-05 20:35:50 · 19740 阅读 · 6 评论 -
数据结构:顺序栈的基本操作
采用顺序存储结构的栈称为顺序栈。顺序栈利用一组连续的存储单元存放栈中的元素,存放顺序依次从栈底到栈顶。由于栈中元素之间的存放地址的连续性,在C语言中,同样采用数组实现栈的顺序存储。另外,增加一个栈顶指针top,用于指向顺序栈的栈顶元素。 通常top=0或者top=-1表示栈为空。两者的...原创 2018-04-16 20:25:22 · 10075 阅读 · 2 评论 -
使用标志量消除循环链表“假溢出”的入队和出队算法
问题:要求循环变量不损失一个空间全部都能利用,设置一个标志量tag,以tag为0或为1来区分头尾指针相同时的队列状态。请编写出此结构相应的入队与出队算法。 设标志位tag,初始化时将tag置为0,当入队成功时tag = 1;出队成功时tag = 0;队列为空的判断条件为:...原创 2018-05-24 00:10:01 · 1397 阅读 · 0 评论