
数据结构
文章平均质量分 62
hixiaowen
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
非递归后序遍历二叉树
void PostOrder(BiTree bt, void (*visit)(TElemType)) /* 使用栈,非递归后序遍历二叉树bt, */ /* 对每个结点的元素域data调用函数visit */ { Stack s; InitStack(s); SElemType selem; BiTree pb=bt; wh原创 2012-04-30 17:25:11 · 383 阅读 · 0 评论 -
数据结构复习笔记(递归先序遍历)
6.41③ 编写递归算法,在二叉树中求位于先序序列中 第k个位置的结点的值。 要求实现下列函数: TElemType PreOrder(BiTree bt, int k); /* bt is the root node of a binary linked list, */ /* Preorder travel it and find the node whose */ /* po原创 2012-05-01 12:18:26 · 1347 阅读 · 0 评论 -
数据结构复习(交换左右子树)
编写递归算法,将二叉树中所有结点的 左、右子树相互交换。 要求实现下列函数: void Exchange(BiTree &bt); /* Exchange the left and right leaves of */ /* bitree whose root node is bt */ 二叉链表类型定义: typedef struct BiTNode {原创 2012-05-03 14:54:35 · 1465 阅读 · 0 评论 -
数据结构复习(求特定子树的高度)
④ 编写递归算法:求二叉树中以元素值 为x的结点为根的子树的深度。 要求实现下列函数: int Depthx(BiTree T, TElemType x); /* 求二叉树中以值为x的结点为根的子树深度 */ 二叉链表类型定义: typedef struct BiTNode { TElemType data; BiTNode *lchild, *rchild;原创 2012-05-04 15:00:18 · 926 阅读 · 0 评论 -
数据结构复习(层次遍历法复制二叉树)
编写复制一棵二叉树的非递归算法。 要求实现下列函数: void CopyBiTree(BiTree T, BiTree &TT); /* 基于层次遍历的非递归复制二叉链表 */ 二叉链表类型定义: typedef char TElemType; // 设二叉树的元素为char类型 typedef struct BiTNode { TElemType data;原创 2012-05-05 13:09:13 · 924 阅读 · 0 评论 -
数据结构复习(层次遍历)
编写按层次顺序(同一层自左至右)遍历二叉树的算法。 要求实现下列函数: void LevelOrder(BiTree bt, char *ss); /* travel BiTree bt by level, Return result by ss. */ 二叉链表类型定义: typedef char TElemType; // 设二叉树的元素为char类型 typedef stru原创 2012-05-06 21:33:48 · 1165 阅读 · 0 评论 -
数据结构复习(先序创建链表二叉树)
已知一棵二叉树的前序序列和中序序列分别 存于两个一维数组中,试编写算法建立该二叉树的二 叉链表。 要求实现以下函数: void BuildBiTree(BiTree &bt, int ps, char *pre, int is, char *ino, int n); /* 当前要建立的子树bt的元素总数为n,*/ /* 元素原创 2012-05-06 21:30:00 · 2601 阅读 · 0 评论 -
数据结构复习(完全二叉树判定)
编写算法判别给定二叉树是否为完全二叉树。 要求实现下列函数: Status CompleteBiTree(BiTree bt); /* judge if the binary tree whose root is bt */ /* is a complete tree. */ 二叉链表类型定义: typedef struct BiTNode原创 2012-05-06 21:26:47 · 667 阅读 · 0 评论 -
数据结构复习(输出二叉排序树部分元素)
编写递归算法,从大到小输出给定二叉排序树 中所有关键字不小于x的数据元素。要求你的算法的时 间复杂度为O(log2n+m),其中n为排序树中所含结点数, m为输出的关键字个数。 实现下列函数: void OrderOut(BiTree t, KeyType x, void(*visit)(TElemType)); /* Output is to use visit(t->data);原创 2012-05-10 19:44:57 · 1964 阅读 · 0 评论 -
排序算法概述
内部排序:整个排序过程不需要访问外存便能完成 内部排序原理:逐步扩大记录的有序序列的过程 基于以上原理的几大类排序算法: (1)插入排序:将无序序列中的一个或者几个记录插入到有序序列中,从而增加有序子序列的长度 (2)交换排序:通过交换无序序列中的记录,从而得到其中关键字最小或者最大的记录,并将它们加入到有序序列中 (3)选择排序:从无序子序列中选择最大或者最小的记录,并将它们加入到有序原创 2012-09-25 15:16:30 · 293 阅读 · 0 评论 -
数据结构(非递归先序遍历)
试直接利用栈的基本操作写出先序遍历的非递归 形式的算法(提示:不必按3.3.2节介绍的从递归到非递归 的方法而直接写出非递归算法)。 要求实现下列函数: void PreOrder(BiTree bt, void (*visit)(TElemType)); /* 使用栈,非递归先序遍历二叉树bt, */ /* 对每个结点的元素域data调用函数visit */ 二叉链表类型定原创 2012-04-27 16:49:11 · 2089 阅读 · 0 评论 -
二叉树相似性
若已知两棵二叉树B1和B2皆为空,或者皆 不空且B1的左、右子树和B2的左、右子树分别相似, 则称二叉树B1和B2相似。试编写算法,判别给定两 棵二叉树是否相似。 要求实现下列函数: Status Similar(BiTree t1, BiTree t2); /* 判断两棵二叉树是否相似的递归算法 */ 二叉链表类型定义: typedef struct BiTNode {原创 2012-04-26 15:43:20 · 1205 阅读 · 0 评论 -
数据结构
一、基本概念: 1、图书馆书目信息可以抽象为一个线性表(每个表结点是一本书的信息,而这些信息有一个信息项是检索的主码) 2、计算机下棋游戏(博弈问题)可以抽象为一棵树的模型(下棋的过程是从根到叶子的路径,而不同的叶子是不同下棋策略对应的不同结果) 3、通常,交通通路问题的数学模型是图数据结构(每个顶点表示一条通路,通路之间相互矛盾的关系以两个顶点之间的连线表示)(设置交通灯问题等价为对图顶点原创 2012-03-11 10:28:38 · 323 阅读 · 0 评论 -
线性表的一些概念
一、线性表的概念: 1、线性表中的数据元素可以是各种各样的,但同一线性表 中的元素必定具有相同的特征(属于同一数据对象),相邻元素之间存在序偶关系 2、记录:一个数据元素含有多个数据项 3、含有大量记录的线性表成为文件 二、线性表的基本操作: 增: InitList(&L):构造一个空的线性表 ListInsert(&L,i,e):插入结点 删: ListDelete(&L,i,原创 2012-03-11 10:47:28 · 779 阅读 · 0 评论 -
非递减顺序表的合并
//破坏原有的链表实现合并: void MergeList(List La,List Lb,List &Lc) { ListClear(Lc); ElemType ea,eb; while(!ListEmpty(La)&&!ListEmpty(Lb)){ GetElem(La,1,ea); GetElem(Lb,1,eb); if(ea<eb){ List原创 2012-03-11 12:24:25 · 1411 阅读 · 0 评论 -
线性表初始化、插入、删除操作
顺序表的定义: #define LIST_INIT_SIZE 100 #define LIST_INCREMENT 10 struct SqList{ ElemType *elem; int listsize; int length; }SqList; status ListInit_Sq(SqList &L) { L.el原创 2012-03-12 20:45:33 · 681 阅读 · 0 评论 -
顺序表查找算法
顺序表的插入和删除算法的时间复杂度为O(n); 求顺序表表长以及取顺序表第i个元素的值这两个算法的时间复杂度为O(1) 查找算法LocateElem_Sq的时间复杂度为O(L.length) 查找算法的实现: int LocateElem(SqList &L,ElemType elem,status(*compare)(ElemType&,ElemType &)) {原创 2012-03-13 15:49:03 · 1547 阅读 · 0 评论 -
单链表的存储结构及其基本操作
指针为数据元素之间逻辑关系的映射 typedef struct LNode{ ElemType data; struct LNode *next; }LNode,* LinkList; Status GetElem(LinkList L,int index,ElemType &elem) { if(index exi原创 2012-03-14 22:32:41 · 939 阅读 · 0 评论 -
单链表的其他操作
//创建头结点,并在头结点后倒序插入 //不需要使用附加指针 void creatList(LinkList &L,int n) { L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; for(int i=1;i p=(LinkList)malloc(sizeof(LN原创 2012-03-15 21:55:18 · 300 阅读 · 0 评论 -
二叉树的顺序存储
假定用两个一维数组L[1..n]和R[1..n]作为 有n个结点的二叉树的存储结构, L[i]和R[i]分别指 示结点i的左孩子和右孩子,0表示空。试写一个算法 判别结点u是否为结点v的子孙。 要求实现以下函数: Status Dencendant(Array1D L,Array1D R,int n,int u,int v) { if(L[v]==0&&R[v]==0)原创 2012-04-24 15:01:00 · 589 阅读 · 0 评论 -
二叉树2
假定用两个一维数组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的子孙。 要求实现以下函数: Status Dencend(Array1D L, Array1原创 2012-04-25 12:24:17 · 573 阅读 · 0 评论 -
卡特兰数
123456进栈,出栈有多少种情况? c(n,2n)/(n+1) n=6→132原创 2012-11-14 22:36:09 · 412 阅读 · 0 评论