数据结构
tim_tsang
keep moving...keep going...keep thinking...come on!!!
展开
-
在无头结点的动态单链表上实现线性表操作Delete(L,i)
在无头结点的动态单链表上实现线性表操作DELETE(L,i)原创 2014-04-09 17:02:26 · 3990 阅读 · 0 评论 -
以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法
试编写一个以三元组形式输出用十字链表表示的稀疏矩阵中非零元素及其下标的算法。原创 2014-06-22 18:21:48 · 10488 阅读 · 1 评论 -
由矩阵元素的下标值i,j求矩阵元素
三元组表的一种变型是,从三元组表中去掉行下标域得到二元组表,另设一个行起始向量,其每个分量是二元组表的一个下标值,指示该行中第一个非零元素在二元组表中的起始位置。试编写一个算法,由矩阵元素的下标值i,j求矩阵元素。试讨论这种方法和三元组表相比有什么优缺点。原创 2014-06-22 18:15:01 · 5369 阅读 · 2 评论 -
按层次顺序(同一层自左至右)遍历二叉树的算法
二叉链表类型定义:typedef char TElemType; // 设二叉树的元素为char类型typedef struct BiTNode { TElemType data; BiTNode *lchild, *rchild;} BiTNode, *BiTree;原创 2014-06-22 19:14:34 · 11241 阅读 · 1 评论 -
矩阵相加的算法(存储结构为三元组表)
假设稀疏矩阵A和B均以三元组表作为存储结构。试写出矩阵相加的算法,另设三元组表C存放结果矩阵。原创 2014-06-22 18:10:11 · 20411 阅读 · 3 评论 -
求k阶斐波那契序列的第m项的值
已知k阶裴波那契序列的定义为 f0=0, f1=0, ..., fk-2=0, fk-1=1; fn=fn-1+fn-2+...+fn-k, n=k,k+1,...试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。要求实现下列函数:原创 2014-04-09 15:56:33 · 9443 阅读 · 2 评论 -
关于有序顺序表的比较的题目
设A=(a1,…,am)和B=(b1,…,bn)均为有序顺序表,A'和B'分别为A和B中除去最大共同前缀后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大的共同前缀为(x,y,y,z), 在两表中除去最大共同前缀后的子表分别为A'=(x,z)和B'=(y,x,x,z))。若A'=B'=空表,则A=B;若A'=空表,而B'≠ 空表原创 2014-04-09 16:40:59 · 2587 阅读 · 0 评论 -
在有序的顺序表 L 中保序插入数据元素 x
设顺序表L中的数据元素递增有序。试写一算法,将x插入到L的适当位置上,并保持该表的有序性。实现函数如下:原创 2014-04-09 16:24:12 · 12475 阅读 · 2 评论 -
在无头结点的动态单链表上实现线性表操作Insert(L,i,b)
在无头结点的动态单链表上实现线性表操作Insert(L,i,b)单链表类型定义如下:原创 2014-04-09 17:18:22 · 8993 阅读 · 3 评论 -
判别两个广义表是否相等的递归算法
试编写判别两个广义表是否相等的递归算法。广义表类型GList的定义:原创 2014-06-22 18:30:02 · 6704 阅读 · 3 评论 -
判别结点u是否为结点v的子孙(二)
假定用两个一维数组L[1..n]和R[1..n]作为有n个结点的二叉树的存储结构, L[i]和R[i]分别指示结点i的左孩子和右孩子,0表示空。试写一个算法,先由L和R建立一维数组T[1..n],使T中第i(i=1,2,...,n)个分量指示结点i的双亲,然后判别结点u是否为结点v的子孙。原创 2014-06-22 18:41:29 · 2315 阅读 · 0 评论 -
在二叉树中求位于先序序列中第k个位置的结点的值
编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值。原创 2014-06-22 18:52:25 · 11679 阅读 · 0 评论 -
计算二叉树中叶子结点的数目
编写递归算法,计算二叉树中叶子结点的数目。二叉链表类型定义:typedef struct BiTNode { TElemType data; BiTNode *lchild, *rchild;} BiTNode, *BiTree;原创 2014-06-22 19:07:26 · 3889 阅读 · 3 评论 -
输出广义表中所有原子项及其所在层次的递归算法
试编写递归算法,输出广义表中所有原子项及其所在层次。广义表类型GList的定义:原创 2014-06-22 18:32:49 · 5672 阅读 · 0 评论 -
复制一棵二叉树的非递归算法
二叉链表类型定义:原创 2014-06-22 19:10:45 · 9235 阅读 · 4 评论 -
判别给定两棵二叉树是否相似
若已知两棵二叉树B1和B2皆为空,或者皆不空且B1的左、右子树和B2的左、右子树分别相似,则称二叉树B1和B2相似。试编写算法,判别给定两棵二叉树是否相似。原创 2014-06-22 18:46:36 · 6816 阅读 · 1 评论 -
判别结点u是否为结点v的子孙(一)
假定用两个一维数组L[1..n]和R[1..n]作为有n个结点的二叉树的存储结构, L[i]和R[i]分别指示结点i的左孩子和右孩子,0表示空。试写一个算法判别结点u是否为结点v的子孙。原创 2014-06-22 18:36:37 · 2884 阅读 · 0 评论 -
按表头、表尾的分析方法重写求广义表的深度的递归算法
试按表头、表尾的分析方法重写求广义表的深度的递归算法。原创 2014-06-22 18:25:46 · 5723 阅读 · 3 评论 -
判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)
试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。 注意:算法中涉及的图的基本操作必须在此存储结构上实现。原创 2014-06-22 19:23:24 · 23682 阅读 · 5 评论 -
将二叉树中所有结点的左、右子树相互交换
编写递归算法,将二叉树中所有结点的左、右子树相互交换。二叉链表类型定义:原创 2014-06-22 19:03:42 · 20122 阅读 · 3 评论 -
从串s中删除所有和串t相同的子串的算法
编写算法,从串s中删除所有和串t相同的子串。StringType是串的一个抽象数据类型,它包含以下6种基本操作:void InitStr(StringType &s); // 初始化s为空串。void StrAssign(StringType &t, StringType s); // 将s的值赋给t。s的实际参数是串变量。int StrCompare(StringTy原创 2014-04-27 15:12:50 · 17821 阅读 · 0 评论 -
串求逆的递推算法
串求逆的递推算法StringType是串的一个抽象数据类型,它包含以下6种基本操作:void InitStr(StringType &s); // 初始化s为空串。void StrAssign(StringType &t, StringType s); // 将s的值赋给t。s的实际参数是串变量。int StrCompare(StringType s, StringTy原创 2014-04-27 15:06:00 · 6554 阅读 · 1 评论 -
以循环链表作稀疏多项式的存储结构, 编写求其导函数的算法
试以循环链表作稀疏多项式的存储结构,编写求其导函数的算法,要求利用原多项式中的结点空间存放其导函数(多项式),同时释放所有无用(被删)结点。实现下列函数:void Difference(LinkedPoly &pa);/* 稀疏多项式 pa 以循环链表作存储结构, *//* 将此链表修改成它的导函数,并释放无用结点 */链式多项式的类型定义:ty原创 2014-04-25 23:06:33 · 4950 阅读 · 1 评论 -
对单链表实现就地逆置
单链表类型定义如下:原创 2014-04-09 23:45:46 · 8394 阅读 · 0 评论 -
顺序表的就地逆置
实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,…,an),逆置为(an,an-1,…,a1)。原创 2014-04-09 17:34:05 · 9419 阅读 · 2 评论 -
删除链表中所有值相同的多余元素
删除表中所有值相同的多余元素 (使得操作后的线性表中所有元素的值均不相同) 同时释放被删结点空间。原创 2014-04-09 17:27:39 · 6164 阅读 · 1 评论 -
将数组A中的元素A[0..n-1]循环右移k位
试设计一个算法,将数组A中的元素A[0..n-1]循环右移k位,并要求只用一个元素大小的附加存储,元素移动或交换次数为O(n)。一维数组类型Array1D的定义:typedef ElemType Array1D[MAXLEN];原创 2014-05-01 16:23:16 · 10976 阅读 · 2 评论 -
串的定长顺序存储结构:从串s中删除所有和串t相同的子串
编写算法,从串s中删除所有和串t相同的子串。定长顺序串SString的类型定义:typedef unsigned char SString[MAXSTRLEN+1]; /* s[0] is the string's length */原创 2014-05-01 11:04:04 · 11027 阅读 · 2 评论 -
逆波兰式的实现(栈实现)
假设表达式由单字母变量和双目四则运算算符构成。试写一个算法,将一个通常书写形式且书写正确的表达式转换为逆波兰式。Stack是一个已实现的栈。可使用的相关类型和函数:原创 2014-05-01 11:37:21 · 2283 阅读 · 0 评论 -
串的定长顺序存储结构:实现串的基本操作Replace(&S,T,V)
编写算法,实现串的基本操作Replace(&S,T,V)。要求采用以下所定义的定长顺序存储表示,但不允许调用串的基本操作。定长顺序串SString的类型定义:原创 2014-05-01 11:09:20 · 19722 阅读 · 3 评论 -
将双向循环链表L=(a1,a2,...,an)改造成L=(a1,a3,...,an,...,a4,a2)
设以带头结点的双向循环链表表示的线性表L=(a1,a2,...,an)。试写一时间复杂度为O(n)的算法,将L改造为L=(a1,a3,...,an,...,a4,a2)。实现下列函数:void ReverseEven(BiLinkList &L);双向循环链表类型定义如下:typedef struct BiNode { ElemType原创 2014-04-25 22:58:14 · 5949 阅读 · 0 评论 -
带头结点的循环链表表示队列的初始化、入队列和出队列的算法
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法。实现下列函数:Status InitCLQueue(CLQueue &rear);Status EnCLQueue(CLQueue &rear, ElemType x);Status DeCLQueue(CLQueue &rear, ElemTyp原创 2014-04-25 23:47:53 · 10524 阅读 · 5 评论 -
一个判别表达式中开、闭括号是否配对出现的算法
实现下列函数:Status MatchCheck(SqList exp);/* 顺序表exp表示表达式; *//* 若exp中的括号配对,则返回TRUE,否则返回FALSE *//* 注:本函数不使用栈 */顺序表类型定义如下:typedef struct {原创 2014-04-25 23:21:04 · 6874 阅读 · 0 评论 -
数据结构:循环队列(二)
假设将循环队列定义为:以域变量rear和length分别指示循环队列中队尾元素的位置和内含元素的个数。试给出此循环队列的队满条件,并写出相应的入队列和出队列的算法(在出队列的算法中要返回队头元素)。循环队列CLenQueue的类型定义如下:typedef char QElemType;typedef struct { QElemType elem[MAXQSIZE]; i原创 2014-04-27 11:40:50 · 8136 阅读 · 0 评论 -
判断字符序列是否为回文
假设称正读和反读都相同的字符序列为"回文",例如,'abba'和'abcba'是回文,'abcde' 和'ababab'则不是回文。试写一个算法判别读入的一个以'@'为结束符的字符序列是否是"回文"。可使用栈Stack和队列Queue及其下列操作:Status InitStack(Stack &S); Status Push(Stack &S, ElemType x)原创 2014-04-27 11:44:01 · 17828 阅读 · 1 评论 -
双向循环链表的基本操作
总结一下双向循环链表的buf原创 2014-04-27 23:28:13 · 1897 阅读 · 0 评论 -
串的置换操作Replace(&S,T,V)的算法
编写一个实现串的置换操作Replace(&S,T,V)的算法。StringType是串的一个抽象数据类型,它包含以下6种基本操作:void InitStr(StringType &s); // 初始化s为空串。void StrAssign(StringType &t, StringType s); // 将s的值赋给t。s的实际参数是串变量。int StrCompare原创 2014-04-27 15:08:44 · 17975 阅读 · 2 评论 -
数据结构:循环队列(一)设置一个标志域后的入队列和出队列的算法
如果希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分,尾指针和头指针值相同时的队列状态是"空"还是"满"。试编写与此结构相应的入队列和出队列的算法。本题的循环队列CTagQueue的类型定义如下:typedef char QElemType;typedef struct { QElemType elem[MAXQSIZE]; int原创 2014-04-26 00:06:09 · 13651 阅读 · 1 评论 -
数据结构:区域染色问题
假设以二维数组g(1..m,1..n)表示一个图像区域,g[i,j]表示该区域中点(i,j)所具颜色,其值为从0到k的整数。编写算法置换点(i0,j0)所在区域的颜色。约定和(i0,j0)同色的上、下、左、右的邻接点为同色区域的点。表示图像区域的类型定义如下:typedef char GTYPE[m+1][n+1];Stack是一个已实现的栈。可使用的相关类型和函数:typ原创 2014-04-25 23:37:30 · 4164 阅读 · 1 评论 -
判别给定表达式中所含括号是否正确配对出现的算法
假设一个算术表达式中可以包含三种括号:圆括号"(" 和")",方括号"["和"]"和花括号"{"和"}",且这三种括号可按任意的次序嵌套使用(如:…[…{…}…[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法(已知表达式已存入数据元素为字符的顺序表中)。 实现下列函数:Status MatchCheck(SqList exp);原创 2014-04-25 23:30:02 · 10297 阅读 · 0 评论