狐狸梦见乌鸦

当坚持成为一种习惯,目标将不在遥远```
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  数据结构

摘要:一、概念:串string是由零个或多个字符组成的有限序列,又名字符串。1、有限,指长度是一个有限的数值。零个字符的串称为空串NULL string,它的长度为0。2、序列,说明串的相邻字符之间具有前驱和后继关系。空格串:只包含空格的串。空格串是有内容有长度的,要与空串区别开。子串和主串:串中任意个数的连续字符组成的子序列称为该串的子串;相应的,包含子串的串称为主串。子串在主串中的位置就是子串的第一个字符在主串中的序号。二、串的比较1、在C语言中比较两个串是否相等,必须是它们串的长度以及它们各个对应位置的字符都相等时,才算是相等。例如:要查找主串str中"abcdabcef" 阅读全文

posted @ 2013-03-01 14:20 灬啊U 阅读(352) 评论(0) 推荐(0)

摘要:2013-02-26 16:4513. 树tree是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中①有且仅有一个特定的称为根root的结点,②当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合本身又是一棵树。并且称为根的子树SubTree。树的定义其实就是我们在讲解栈时提到的递归的方法。也就是在树的定义中还用到了树的概念。13.1 树的定义中还需要强调两点①n>0 时根结点时唯一的,不可能存在多个根结点。②m>0 时,子树的个数没有限制,但是他们一定是互不相交的。13.2 结点分类13.2.1 树的结点包含一个数据元素及若 阅读全文

posted @ 2013-02-26 16:49 灬啊U 阅读(195) 评论(0) 推荐(0)

摘要:队列queue,是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。遵循FIFO,允许插入的一端是队尾,允许删除的一端是队头。 为了避免当队中只有一个元素时,队头和队尾重合使处理变得麻烦,引入了两个指针,front指向队头,rear指向队尾元素的下一位置。当front等于rear时,队列为空。假设一个队列有n个元素,则顺序存储的队列需要建立一个大于n的数组,并把队列中的所有元素存储在数组的前n个单元,数组下标为0的一端为队头。那么入队时,其实就是在队尾追加一个元素,不需要移动任何元素,时间复杂度为o(1).而出队时,则将队头元素移除,即将数组下标为0位置处的元素移除,那么这样就意... 阅读全文

posted @ 2013-02-02 14:19 灬啊U 阅读(343) 评论(0) 推荐(0)

摘要:想想计算机是如何实现四则运算的呢!我们发现四则运算中的括号都是成对出现的,多重括号也都是完全嵌套匹配的。 先了解下后缀表达式和中缀表达式。我们平时使用的标准的四则运算表达式就是中缀表达式。中缀表达是的特点是:运算符都是在数字的中间,而我们需要做的就是把中缀表达式转换为后缀表达式,即,所有的符号都是在数字的后面出现的。 例如:中缀表达式:1+(2-1)*3+4/2,转换为后缀表达式则为1 2 1 - 3 * + 4 2 / + 那么如何借用栈实现转换呢? 思路:首先我们从一个数组strmid存放中缀表达式,然后从左往右遍历遍历表达式,遇到数字则输出,即成为后缀表达式的一部分;如果是符... 阅读全文

posted @ 2013-02-01 14:49 灬啊U 阅读(857) 评论(0) 推荐(0)

摘要:栈: 栈是限定仅在表尾进行插入和删除操作的线性表。遵循先进后出的原则。允许插入、删除的一端为栈顶top;另一端为栈底bottom。 栈,首先它是一个线性表,栈元素具有线性关系,即前驱后继关系。只不过它是一种特殊的线性表。特殊之处在于限制了这个线性表的插入和删除位置,它始终都是在栈顶进行。栈底是固定的,最先进入的只能在栈底。 1.栈的顺序存储结构: 对于栈只能一头插入、删除操作的线性表来说,用数组的下标为0的一端作为栈底,定义一个top指示栈顶元素在数组中位置,如果申请的数组长度为SIZE,则栈顶的位置必须小于SIZE,当栈中存在一个元素时,top = 0。栈满时,top = SIZE ... 阅读全文

posted @ 2013-01-26 12:01 灬啊U 阅读(294) 评论(0) 推荐(1)

摘要:线性表线性表:0个或多个数据元素的有限序列。首先,它是一个序列。即,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都由前驱和后继。线性表还强调是有限的。事实上,在计算机中处理的对象都是有限的,那种无限的数列,只存在数学的概念中。5.1 线性表的顺序存储结构为了建立一个线性表,必须在内存中找到一块地,这块地的第一个位置非常关键,它是存储空间的起始位置。顺序存储结构需要3个属性:①存储空间的起始位置;②线性表最大存储容量;③线性表的当前长度;数组的长度是:存放线性表的存储空间的长度。线性表的长度:是线性表中数据元素的个数,随着线性表插入和删除操作的进行,而 阅读全文

posted @ 2013-01-23 16:44 灬啊U 阅读(604) 评论(0) 推荐(0)

摘要:排序和查找:排序:排序sorting是把一系列类似的数据按升序或降序排列的过程。C标准库提供的qsort函数,直接排序。排序算法分为:随机存取目标排序法;顺序目标排序法。排序算法的分类:对数组的排序:①交换排序 exchange ②选择排序 selection ③插入排序 insertion排序算法的评价:平均情况下对信息排序的速度。最优和最劣情况下的速度。冒泡法:bubble sort。最著名的排序方法,其出名在于名字形象且操作简单,其名声不好在于它是目前最差的排序之一。冒泡排序法,是一种交换排序,涉及重复比较和必要时相邻元素的交换。气泡排序法,通过双重循环驱动完成。外层循环使数组被扫描co 阅读全文

posted @ 2013-01-22 08:59 灬啊U 阅读(165) 评论(0) 推荐(0)

摘要:1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define N 8 5 #define STEP 3 6 7 typedef int datatype; 8 9 typedef struct _node_10 {11 datatype data;12 struct _node_ *next;13 }linknode, *linklist;14 #if 015 linklist p, q;16 linklist h = (linklist)malloc(sizeof(linknode));17 h->next = N 阅读全文

posted @ 2012-09-01 00:16 灬啊U 阅读(196) 评论(0) 推荐(0)

摘要:单向链表只有一个指向后继的指针来表示结点间的逻辑关系,因此任意一结点开始找其后继结点很方便,但是要找其前驱结点比较麻烦。双向链表是用两个指针表示结点的逻辑关系。即增加了一个指向其前驱的指针域,这样形成的链表又两种不同的链,即前驱和后继。因此称为双链表。在双向链表中,根据已知结点查找其直接前驱和指直接后继结点也很方便。双向链表的结点定义:typedef int elemtype;typedef struct Dnode{ struct Dnode *prior; struct Dnode *next; elemtype data;}Dnode,*Dlinklist;双向链表的结构图prio... 阅读全文

posted @ 2012-08-30 22:16 灬啊U 阅读(186) 评论(0) 推荐(0)

摘要:今天做的一道关于单向链表的简单的题目。将一个链表的倒数第pos个成员打印出来。思路很简单,首先创建一个简单的单向链表,插入相应的元素,利用2个指针head1和head2,先让head1先走pos-1个位置后,在让两个指针同时走,当head1走到最后一个节点时,此时的head2即为倒数第pos个成员的指针。单向链表:每个结点的存储地址放在直接前驱的指针域中,每个结点只有一个指向后继的指针。访问数据元素只能由链表头一次到链表尾,而不能逆向访问。单向链表又分为带头节点和不带头节点2种类型。带头节点的链表有效解决了“第一个结点”问题,因为链表中第一个结点是没有直接前驱的,而且它的地址是整个链表的地址, 阅读全文

posted @ 2012-08-30 11:51 灬啊U 阅读(263) 评论(0) 推荐(0)

摘要:数据结构组成: 顺序表\链表 顺序栈\链栈 邻接矩阵\邻接表1 逻辑结构(前驱和后继来判断)线性结构:线性表 栈 队列非线性结构:树(节点), 图(顶点)2 存储结构① 顺序存储:将数据结构中的各个元素按照其逻辑的顺序存放于一片连续的存储空间中。。。。。如:数组② 链式存储:将数据结构中的各元素分布到储存器的不同点,用地址或者链指针方式建立他们的联系。(链式存储结构是重点,因为数据结构中的元素的关系在计算机内部很大程度上是通过地址或者指针来建立的)③ 索引存储:数据文件 + 索引表。。。。例如:判断2个字符串中相同元素的个数,利用了ASCII表。④ 散列(Hash) :根据数据元素的字符特殊字 阅读全文

posted @ 2012-02-08 15:35 灬啊U 阅读(279) 评论(0) 推荐(0)