数据结构与算法
文章平均质量分 77
阿咪
深圳.湖北
展开
-
字符串模式匹配
子串的定位操作通常称作串的模式匹配,是各种串处理系统中最重要的操作之一。设有2个串:主串S和子串T,串的简单模式匹配算法是:从主串S 中的第一个字符开始和子串T中的第一个字符比较,分别用i和j 指示S串和T串中正在比较的字符的位置。若相等,则继续逐个比较后续字符;否则从主串S的第二个字符开始再重新与子串的第一个字符进行比较。依次类推,直到子串T中的每个字符依次和主串S中的一个连续字符序列相等,原创 2005-08-02 20:24:00 · 6490 阅读 · 5 评论 -
颠倒单词的出现次序
[题目]:请编写一个函数来颠倒单词在字符串里的出现顺序。例如,将字符串“Do or not do, there is no try.”转换为“try. no is there do, not or Do”假设所有单词都以空格为分隔符,标点符号也当作字符来对待。 对于这类颠倒字符或者单词的处理,我们通常的办法是采用一个临时缓冲区,将识别出来的字符或者单词写道这个缓冲区里,最后把缓冲转载 2006-05-30 19:43:00 · 3359 阅读 · 0 评论 -
删除单向链表头元素
[题目]:下面是一个用来删除单向链表头元素的函数。请找出其中的漏洞并加以改正。 void RemoveHead (node *head) { free (head); head = head->next;} 这种调试纠错类的考题经常出现在程序设计面试中。我们可以从以下四个比较集中的方面进行检查和分析: 1.进入函数的数据是否转载 2006-05-25 18:08:00 · 4910 阅读 · 1 评论 -
链表插入与删除操作中的头、尾指针
[题目]:有一个单链表,它的元素全部是整数。head和tail分别是指向该链表第一个元素(即头元素)和最后一个元素(即尾元素)的全局性指针。请实现调用接口如下所示的两个C语言函数: int Delete (element *elem);转载 2006-05-23 21:32:00 · 7380 阅读 · 0 评论 -
删除单链表的倒数第m个元素
[题目]: 给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的最后一个元素将被返回。 如果沿从头至尾的方向从链表中的某个元素开始,遍历m个元素后刚好达到链表尾,那么该元素就是我们所要找的。这样,我们可以引出第一种办法:从头结点开始转载 2006-05-21 09:08:00 · 6803 阅读 · 1 评论 -
删除特定字符
[题目]:用 C/C++语言编写一个高效率的函数来删除字符串里给定的字符集。这个函数的调用模型如下: viod removechars (char str[], char remove[])注意,remove中的所有字符都必须从str中删除干净。例如,如果str是"Battle of the Vowels: Hawaii vs. Grozny",remove是"aeiou"转载 2006-05-26 21:28:00 · 3948 阅读 · 0 评论 -
Prim算法构造最小生成树
对于网络,其生成树中的边也带权,将生成树各边的权值总和称为生成树的权,并将权值最小的生成树称为最小生成树(Minimun Spanning Tree),简称为MST。Prim算法的基本思想是:(1) 在图G=(V, E) (V表示顶点 ,E表示边)中,从集合V中任取一个顶点(例如取顶点v0)放入集合 U中,这时 U={v0},集合T(E)为空。(2) 从v0出发寻找与U中顶点相邻(另一顶点原创 2005-09-26 15:40:00 · 3431 阅读 · 3 评论 -
图(邻接表存储)的遍历
图的遍历是指从某个顶点出发,沿着某条搜索路径对图中所有的顶点进行访问且仅访问一次的过程。1. 深度优先搜索(DFS)深度优先搜索类似于树的前序遍历,也是一遇到顶点就进行访问。其特点是尽可能先对纵深方向进行搜索,因此很容易用递归算法实现。如果将遍历过程中走过的边连接起来,即可得到深度优先遍历生成树。深度优先搜索遍历图的算法:首先访问指定的起始顶点v0,从v0出发,访问v0的一个未被访问过的邻接顶点原创 2005-09-23 10:17:00 · 3806 阅读 · 11 评论 -
排序二叉树及其遍历
所谓建立排序二叉树就是,就是将各结点数据元素顺序插到一棵二叉树中,在插入的过程中,始终保持二叉树中每个结点的值都大于其左子树上每个结点的值,而小于或等于其右子树上每个结点的值,每个结点信息包括结点数据(结点值)、左子树指针、右子树指针。程序执行的过程中,bt指针始终指向根结点,p指针指向当前已找到的结点,q指针不断向下寻找新的结点。 为实现二叉树的非递归算法,需要设置一个栈来保存指向结点原创 2005-09-12 09:47:00 · 6665 阅读 · 1 评论 -
稀疏矩阵的存储及运算
存储什么是稀疏矩阵?人们无法给出确切的定义,它只是一个凭人们的直觉来了解的概念。假若在m*n的矩阵中,非零元个数num,我们可以称之为稀疏矩阵,并称t= num/(m*n) 为矩阵的稀疏因子。通常认为t时称为稀疏矩阵。存储稀疏矩阵时,往往只存放其中的非零元。稀疏矩阵的三元组表法是顺序存储方法的一种。采用这种方法时,线性表中的每个结点对应稀疏矩阵的一个非零元素,其中包括3个字段,分别为该元素的行下标原创 2005-09-05 17:26:00 · 17026 阅读 · 4 评论 -
最低公共祖先
[题目]:已知二元搜索树(Binary Search Tree)上两个结点的值,请找出它们的公共祖先。你可以假设这两个值肯定存在。这个函数的调用接口如下所示: int FindLowestCommonAncestor(node *root, int value1, int value2); 根据树的存储结构,我们可以立刻得到一个这样的算法:从两个给定的结点出发回溯,两条回溯路线转载 2006-06-07 13:57:00 · 3808 阅读 · 2 评论