摘要:
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位算法实现原始的算法实现在最坏的情况下需要进行O(n2)的比较和交换。V. Pratt的书对算法进行了少量修改,可以使得性能提升至O(nlog2n)。这比最好的比较算法的O(nlogn)要差一些。希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算 阅读全文
摘要:
/* c7-4.h 无向图的邻接多重表存储表示 */ #define MAX_VERTEX_NUM 20 typedef enum{unvisited,visited}VisitIf; typedef struct EBox { VisitIf mark; /* 访问标记 */ int ivex,jvex; /* 该边依附的两个顶点的位置 */ struct EBox *ilink,*jlink; /* 分别指向依附这两个顶点的下一条边 */ InfoType *info; /* 该边信息指针 */ }EBox; typedef struct { VertexType d... 阅读全文
摘要:
/* c7-3.h 有向图的十字链表存储表示 */ #define MAX_VERTEX_NUM 20 typedef struct ArcBox { int tailvex,headvex; /* 该弧的尾和头顶点的位置 */ struct ArcBox *hlink,*tlink; /* 分别为弧头相同和弧尾相同的弧的链域 */ InfoType *info; /* 该弧相关信息的指针(可无) */ }ArcBox; /* 弧结点 */ typedef struct { VertexType data; ArcBox *firstin,*firstout; /* 分别... 阅读全文
摘要:
/* c7-2.h 图的邻接表存储表示 */ #define MAX_VERTEX_NUM 20 typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网} */ typedef struct ArcNode { int adjvex; /* 该弧所指向的顶点的位置 */ struct ArcNode *nextarc; /* 指向下一条弧的指针 */ InfoType *info; /* 网的权值指针) */ }ArcNode; /* 表结点 */ typedef struct { VertexType data; /*... 阅读全文
摘要:
/* c7-1.h 图的数组(邻接矩阵)存储表示 */ #define INFINITY INT_MAX /* 用整型最大值代替∞ */ #define MAX_VERTEX_NUM 20 /* 最大顶点个数 */ typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网}*/typedef struct { VRType adj; /* 顶点关系类型。对无权图,用1(是)或0(否)表示相邻否; */ /* 对带权图,c则为权值类型 */ InfoType *info; /* 该弧相关信息的指针(可无) */ }ArcC... 阅读全文
摘要:
/* c6-5.h 树的二叉链表(孩子-兄弟)存储表示 */ typedef struct CSNode { TElemType data; struct CSNode *firstchild,*nextsibling; }CSNode,*CSTree; /* bo6-5.c 树的二叉链表(孩子-兄弟)存储(存储结构由c6-5.h定义)的基本操作(17个) */ Status InitTree(CSTree *T) { /* 操作结果: 构造空树T */ *T=NULL; return OK; } void DestroyTree(CSTree *T) { /* 初始条件: ... 阅读全文
摘要:
/* c6-4.h 树的双亲表存储表示 */ #define MAX_TREE_SIZE 100 typedef struct { TElemType data; int parent; /* 双亲位置域 */ } PTNode; typedef struct { PTNode nodes[MAX_TREE_SIZE]; int n; /* 结点数 */ } PTree; /* bo6-4.c 树的双亲表存储(存储结构由c6-4.h定义)的基本操作(14个) */ Status InitTree(PTree *T) { /* 操作结果: 构造空树T */ (*T).n=0... 阅读全文
摘要:
/* c6-3.h 二叉树的二叉线索存储表示 */ typedef enum{Link,Thread}PointerTag; /* Link(0):指针,Thread(1):线索 */ typedef struct BiThrNode { TElemType data; struct BiThrNode *lchild,*rchild; /* 左右孩子指针 */ PointerTag LTag,RTag; /* 左右标志 */ }BiThrNode,*BiThrTree; /* bo6-3.c 二叉树的二叉线索存储(存储结构由c6-3.h定义)的基本操作 */ Status Cr... 阅读全文
摘要:
/* c6-2.h 二叉树的二叉链表存储表示 */ typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; /* 左右孩子指针 */ }BiTNode,*BiTree; /* bo6-2.c 二叉树的二叉链表存储(存储结构由c6-2.h定义)的基本操作(22个) */ Status InitBiTree(BiTree *T) { /* 操作结果: 构造空二叉树T */ *T=NULL; return OK; } void DestroyBiTree(BiTree *T) { /* 初始条... 阅读全文
摘要:
/* c6-1.h 二叉树的顺序存储表示 */ #define MAX_TREE_SIZE 100 /* 二叉树的最大结点数 */ typedef TElemType SqBiTree[MAX_TREE_SIZE]; /* 0号单元存储根结点 */ typedef struct { int level,order; /* 结点的层,本层序号(按满二叉树计算) */ }position; /* bo6-1.c 二叉树的顺序存储(存储结构由c6-1.h定义)的基本操作(23个) */ Status InitBiTree(SqBiTree T) { /* 构造空二叉树T。因为T是固定数组,不会... 阅读全文