
数据结构
文章平均质量分 81
fk543
fk5431.com
展开
-
数据结构栈及其用法(C语言实现)
一、栈的定义栈是限定仅在表尾进行插入或删除操作的线性表。一次对栈来说,表尾端有其特殊的含义,称为栈顶,相应的,表头端成为栈底。不含元素的空表称为空栈。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。二、栈的特点栈作为一种数据结构原创 2015-04-22 16:52:07 · 1619 阅读 · 0 评论 -
图的邻接表存储
邻接表是图的一种链式存储结构。在邻接表中,对图中的每个定点建立一个单链表,第i原创 2015-06-11 11:00:30 · 1052 阅读 · 0 评论 -
哈夫曼树的建立和哈夫曼编码的构造
给定n个权值作为n的叶子结点,构造一颗二叉树,若带权路径长度达到最小,成这样的二叉树为最有二叉树,也称为哈夫曼树 。哈夫曼树是带全路径长度最短的树,权值较大的结点离根较近。哈夫曼树的构造:假设有n个权值,则构造出的哈夫曼树有n个叶子结点。n个权值分别设为w1、w2、…、wn,则哈夫曼树的构造规则:(1)将w1、w2、…、wn看成是有n棵树的森林(每棵树仅有一个结点);原创 2015-06-02 20:56:06 · 3229 阅读 · 0 评论 -
二叉树的层次遍历
二叉树的遍历在之前写过的递归和非递归的形式都是通过访问一个子树在访问结点来完成的,有时候我们需要对树进行一层一层的遍历,这样就的遍历叫做层次遍历。实现二叉树的层次遍历可以借助一个队列来进行实现,我们访问根结点,把它放入队列,如果队列中现在不为空,那么就把这个结点出队列,并且输出结点,在把它的左孩子结点和右孩子结点入队列。就这样进行循环直到队列为空停止,此时输出的结点就是层次遍历的顺序。代码原创 2015-05-30 11:09:44 · 843 阅读 · 0 评论 -
根据前序和中序遍历求后序 /后序和中序求前序
给出一二叉树的前序遍历的顺序和中序遍历的顺序我们可以由此得出后序遍历的顺序,根据它们的访问顺序,前序遍历的第一个结点肯定是根结点,与之对应在中序遍历找到对应的根结点的位置,那么在中序遍历中,根结点的左边的元素都属于左子树的元素,根结点右边的元素都属于右子树的元素,之后把左子树当成一个继续操作,就这样可以推出整个树,继而求出后序遍历:#include#include#include#inc原创 2015-05-17 00:15:30 · 2183 阅读 · 1 评论 -
二叉树的建立和递归遍历、非递归遍历操作
二叉树是我们平时使用较多的一种数据结构,它是每个节点最多有两个子树的树结构。关于树的概念和性质就不再多介绍,我来对数的建立和一些操作进行总结。首先我们定义树的数据类型:typedef struct TREE_NODE{ char data; struct TREE_NODE *lchild; struct TREE_NODE *rchild;}*tree_nod原创 2015-05-07 20:59:03 · 1216 阅读 · 0 评论 -
树的基本操作
对于树来说我们基本的操作有统计它叶子的个数,还可以统计结点个数,以及每一层结点的个数:首先,求叶子的个数,我们通过递归遍历的方法来实现:int getleaf(tree_node t) //求叶子数{ int a,b; if(t==NULL) //判断是否为空 return 0; else { if(t->lchild=原创 2015-05-08 20:25:49 · 1609 阅读 · 1 评论 -
双向链表及其用法
一、双向链表的定义二、双向链表的存储结构三、双向链表的实现与操作原创 2015-04-17 00:39:08 · 11378 阅读 · 5 评论 -
顺序表及其用法
一、顺序表的定义顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续存储单元依次存储数据元素的线性结构。线性表才用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。二、顺序表的存储结构将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构,顺序表采用的便是顺序结构。在顺序结构中,假设每个元素占用的空间原创 2015-04-14 23:17:06 · 1384 阅读 · 0 评论 -
单链表及其用法
一、链表的定义链表是一种物理存储单元上非连续、非顺序的存储结,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表是由一系列结点组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。二、链表的存储结构链表的存储结构是链式存储,链式存储的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以原创 2015-04-15 16:41:00 · 1170 阅读 · 0 评论 -
循环链表之简介
循环链表是另一种形式的链表,他的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。由此,从表中任一结点出发均可找到表中其他节点。循环链表的结构图如下:循环链表的操作和之前的写过的单链表的操作是基本一致的,所以我就不再给出详细的代码,我来说说它们之间的不同:循环链表与单链表的差别在于算法之中的循环条件不是p或者p->next 是否为空,而变成了它们是否等于头指针。循环链表原创 2015-04-15 19:43:03 · 1345 阅读 · 0 评论 -
数据结构队列及其用法(C语言实现)
一、对列的定义队列是一种特殊的线性表,它的特殊之处在于它只允许在表的前端进行删除操作,在表的后端进行插入操作,像栈一样,队列也是一种操作受限的线性表。进行插入操作端称为队尾,进行删除操作端称为队首。在一个队列中插入一个队列元素称为入队,在队列中产出一个队列元素称为出队。二、队列的特点队列只允许在一段插入,在另一端删除,所以只有最早进入对列的才能最先从队列中删原创 2015-04-22 20:44:11 · 1493 阅读 · 0 评论 -
转换字符串到整数——LintCode
实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。您在真实的面试中是否遇到过这个题? Yes样例"10" =>10"-1" => -1"123123123123123" =>原创 2015-12-14 14:56:58 · 1257 阅读 · 0 评论