
数据结构
文章平均质量分 82
7urin9
得失并不重要,重要的是你要知道你为什么得,清楚你得到了什么;为什么失,明白你失去了什么。。。
展开
-
实现教科书图7.33的程序(另加孤立顶点台北)(两城市之间的最短路径模拟)
// algo7-9.cpp 实现教科书图7.33的程序(另加孤立顶点台北)#define MAX_NAME 9 // 顶点字符串的最大长度+1#define MAX_INFO 20 // 相关信息字符串的最大长度+1typedef int VRType;typedef char VertexType[MAX_NAME];typedef char InfoType;#include"c原创 2014-09-14 09:12:51 · 1345 阅读 · 0 评论 -
图的数组(邻接矩阵)存储结构
图是比较复杂的数据结构,它由顶点和顶点之间的弧或边组成。任何两个顶点之间都可能存在弧或边。在计算机存储图时,只要能表示出顶点的个数及每个顶点的特征、每对顶点之间是否存在弧(边)及弧(边)的特征,就能表示出图的所有信息,并作为图的一种存储结构。本章介绍了4 种图的存储结构,它们各有特点。原创 2014-08-25 21:29:49 · 1426 阅读 · 0 评论 -
无向图的联通分量和生成树(调用算法7.7、7.8,将无向图 构造为生成森林,并以孩子—兄弟二叉链表存储之)
具有n 个顶点的无向连通图至少有n-1 条边,如果只有n-1 条边,则不会形成环,这样的图称为“生成树”。连通图可通过遍历构造生成树,非连通图的每个连通分量可构造一棵生成树,整个非连通图构造为生成森林。algo7-1.cpp 调用算法7.7、7.8,将无向图构造为生成森林,并以孩子—兄弟二叉链表存储之。原创 2014-08-29 21:35:41 · 1896 阅读 · 0 评论 -
检验深度优先和广度优先的程序(邻接矩阵存储结构)
图的遍历对图的搜索就是对图中顶点的遍历。图中各顶点的关系比较复杂、一个顶点可能有多个邻接顶点,也可能是独立顶点(非连通图)。为了不重复地访问所有顶点,需设立一个访问标志数组visited[],并置其初值为FALSE(未被访问)。遍历时只访问那些未被访问过的顶点,且在访问后,将其访问标志的值改为TRUE。当所有顶点访问标志的值都为TRUE,则图已遍历。遍历一般从图的第1 个顶点开原创 2014-08-29 21:19:08 · 655 阅读 · 0 评论 -
无向图的邻接多重表存储结构
// c7-4.h 无向图的邻接多重表存储结构(见图7.42)#define MAX_VERTEX_NUM 20enum VisitIf{unvisited,visited};struct EBox{ VisitIf mark; // 访问标记 int ivex,jvex; // 该边依附的两个顶点的位置 EBox *ilink,*jlink; // 分别指向依附这两个顶点的下一条边原创 2014-08-29 21:12:32 · 3535 阅读 · 1 评论 -
有向图的十字链表存储结构
// c7-3.h 有向图的十字链表存储结构(见图7.33)#define MAX_VERTEX_NUM 20struct ArcBox // 弧结点{ int tailvex,headvex; // 该弧的尾和头顶点的位置 ArcBox *hlink,*tlink; // 分别为弧头相同和弧尾相同的弧的链域 InfoType *info; // 该弧相关信息的指针,可指向权值或其他信原创 2014-08-29 20:58:25 · 1963 阅读 · 0 评论 -
实现算法2.4的程序
// algo2-4.cpp 修改算法2.7的第一个循环语句中的条件语句为开关语句,且当// *pa=*pb时,只将两者中之一插入Lc。此操作的结果和算法2.1相同#include"c1.h"typedef int ElemType;#include"c2-1.h"#include"bo2-1.cpp"#include"func2-3.cpp" // 包括equal()、comp()、原创 2014-08-15 21:53:27 · 718 阅读 · 0 评论 -
用单链表实现算法2.1
// algo2-12.cpp 用单链表实现算法2.1,仅有4句与algo2-1.cpp不同#include"c1.h"typedef int ElemType;#include"c2-2.h" // 此句与algo2-1.cpp不同(因为采用不同的结构)#include"bo2-2.cpp" // 此句与algo2-1.cpp不同(因为采用不同的结构)#include"func2-3.原创 2014-08-15 21:48:44 · 631 阅读 · 0 评论 -
实现算法2.20、2.21的程序
// algo2-11.cpp 实现算法2.20、2.21的程序#include"c1.h"typedef int ElemType;#include"c2-5.h"#include"bo2-6.cpp"#include"func2-3.cpp" // 包括equal()、comp()、print()、print2()和print1()函数Status ListInsert_L(Lin原创 2014-08-15 21:34:59 · 833 阅读 · 0 评论 -
一元多项式的表示及相加(抽象数据类型Polynomial的实现)
// c2-6.h 抽象数据类型Polynomial的实现(见图2.45)typedef struct // 项的表示,多项式的项作为LinkList的数据元素{float coef; // 系数int expn; // 指数}term,ElemType; // 两个类型名:term用于本ADT,ElemType为LinkList的数据对象名图246 是根据c2-5.h 和c2-6原创 2014-08-15 21:35:43 · 2304 阅读 · 1 评论 -
说明exit()函数作用的程序
// algo1-4.cpp 说明exit()函数作用的程序#include"c1.h"int a(int i){if(i==1){printf("退出程序的运行\n");exit(1);}return i;}void main(){int i;printf("请输入i:");scanf("%d",&i);printf("a(i)=%d\n",a(i));}原创 2014-08-15 22:13:54 · 846 阅读 · 0 评论 -
实现算法2.2的程序
// algo2-2.cpp 实现算法2.2的程序#include"c1.h"typedef int ElemType;#include"c2-1.h"#include"bo2-1.cpp"#include"func2-3.cpp" // 包括equal()、comp()、print()、print2()和print1()函数void MergeList(SqList La,SqLis原创 2014-08-15 21:55:31 · 690 阅读 · 0 评论 -
带头结点的线性链表类型
// c2-5.h 带头结点的线性链表类型typedef struct LNode // 结点类型(见图2.40){ElemType data;LNode *next;}*Link,*Position;struct LinkList // 链表类型(见图2.41){Link head,tail; // 分别指向线性链表中的头结点和最后一个结点int len; // 指示线性链表中原创 2014-08-15 21:37:51 · 1661 阅读 · 0 评论 -
栈的应用举例1
// algo3-1.cpp 调用算法3.1的程序#define N 8 // 定义待转换的进制N(二进制~九进制)typedef int SElemType; // 定义栈元素类型为整型#include"c1.h"#include"c3-1.h" // 采用顺序栈#include"bo3-1.cpp" // 利用顺序栈的基本操作void conversion() // 算法3.1{原创 2014-08-15 22:55:12 · 981 阅读 · 0 评论 -
不带头借点的单链表的扩展功能
// func2-1.cpp 不带头结点的单链表(存储结构由c2-2.h定义)的扩展操作(3个)// algo2-6.cpp和bo7-2.cpp用到void InsertAscend(LinkList &L,ElemType e,int(*compare)(ElemType,ElemType)){ // 按关键字非降序将e插入表L。函数compare()返回值为形参1的关键字-形参2的关键字原创 2014-08-15 21:45:10 · 640 阅读 · 0 评论 -
双向链表
// c2-4.h 线性表的双向链表存储结构(见图2.36)typedef struct DuLNode{ElemType data;DuLNode *prior,*next;}DuLNode,*DuLinkList;双向链表(见图237)每个结点有两个指针,一个指向结点的前驱,另一个指向结点的后继。所以,从链表的每一个结点出发,都可到达任意一个结点,有利于链表的查原创 2014-08-15 21:38:47 · 672 阅读 · 0 评论 -
线性表的静态单链表存储结构
// c2-3.h 线性表的静态单链表存储结构(见图2.23)#define MAX_SIZE 100 // 链表的最大长度typedef struct{ ElemType data; int cur;}component,SLinkList[MAX_SIZE];// algo2-7.cpp 教科书中图2.10静态链表示例// 第1个结点的位置在[0].cur中。成员cur的值为0,原创 2014-08-15 21:44:21 · 735 阅读 · 0 评论 -
变量的引用类型和非引用类型的区别
///////////////////////////// author:liyuechao// date:2014.8.8////////////////////////////// algo1-3.cpp 变量的引用类型和非引用类型的区别#includevoid fa(int a) // 在函数中改变a,将不会带回主调函数(主调函数中的a仍是原值){a++;printf("在原创 2014-08-15 22:13:04 · 1301 阅读 · 1 评论 -
每一对顶点之间的最短路径
// func7-2.cpp 算法7.16,algo7-7.cpp和algo7-9.cpp用到void ShortestPath_FLOYD(MGraph G,PathMatrix P,DistancMatrix D){ // 用Floyd算法求有向网G中各对顶点v和w之间的最短路径P[v][w]及其带权长度D[v][w]。 // 若P[v][w][u]为TRUE,则u是从v到w当前求得最短原创 2014-09-14 09:04:20 · 1839 阅读 · 0 评论 -
关键路径
// algo7-5.cpp 求关键路径。实现算法7.13、7.14的程序#include"c1.h"#define MAX_NAME 5 // 顶点字符串的最大长度+1typedef int InfoType;typedef char VertexType[MAX_NAME]; // 字符串类型#include"c7-21.h"#include"bo7-2.cpp"#include原创 2014-09-14 08:49:27 · 960 阅读 · 0 评论 -
串的表示和实现(串的堆分配存储、串的定长顺序存储结构)
在C 语言中,字符串存于字符型数组中。无论数组有多大,用数值0 表示串结束。图41 表示了“but”字符串在C 语言中的存储结构。其中数组a 的定义为char a[10];C 语言还在库函数string.h 中提供了许多串处理的基本操作,如求串长函数strlen()、串拷贝函数strcpy()等。算法语言本身提供的字符串存储结构及其基本操作不一定能满足实际应用的需要,原创 2014-08-18 21:38:12 · 5029 阅读 · 1 评论 -
从某个源点到指定地点的最短路径(迪杰斯特拉算法的实现)
// algo7-6.cpp 实现算法7.15的程序。迪杰斯特拉算法的实现#include"c1.h"#define MAX_NAME 5 // 顶点字符串的最大长度+1#define MAX_INFO 20 // 相关信息字符串的最大长度+1typedef int VRType;typedef char InfoType;typedef char VertexType[MAX_NAM原创 2014-09-14 08:55:14 · 2720 阅读 · 0 评论 -
有向无环图及其应用(拓扑排序)
// func7-1.cpp algo7-4.cpp和algo7-5.cpp要调用void FindInDegree(ALGraph G,int indegree[]){ // 求顶点的入度,算法7.12、7.13调用 int i; ArcNode *p; for(i=0;i<G.vexnum;i++) indegree[i]=0; // 赋初值 for(i=0;i<G.vexnu原创 2014-09-14 08:42:21 · 965 阅读 · 2 评论 -
串的块链存储结构
// c4-3.h 串的块链存储结构(见图4.7)#define CHUNK_SIZE 4 // 可由用户定义的块大小struct Chunk{ char ch[CHUNK_SIZE]; Chunk *next;};struct LString{ Chunk *head,*tail; // 串的头和尾指针 int curlen; // 串的当前长度};原创 2014-08-18 21:59:04 · 1586 阅读 · 0 评论 -
离散事件模拟(银行业务模拟。实现算法3.6、3.7的程序)
// func3-3.cpp、algo3-12.cpp和algo3-13.cpp用到的函数及变量等#include"c1.h"typedef struct // 定义ElemType为结构体类型{ int OccurTime; // 事件发生时刻 int NType; // 事件类型,Qu表示到达事件,0至Qu-1表示Qu个窗口的离开事件}Event,ElemType; // 事件类型原创 2014-08-18 21:14:44 · 3119 阅读 · 1 评论 -
队列的顺序存储结构(循环队列)
// c3-3.h 队列的顺序存储结构(循环队列)(见图3.31)#define MAX_QSIZE 5 // 最大队列长度+1struct SqQueue{ QElemType *base; // 初始化的动态分配存储空间 int front; // 头指针,若队列不空,指向队列头元素 int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置};原创 2014-08-17 21:51:28 · 1613 阅读 · 0 评论 -
循环队列-队列的顺序表示和实现
// c3-5.h 队列的顺序存储结构(非循环队列,队列头元素在[0]单元)#define QUEUE_INIT_SIZE 10 // 队列存储空间的初始分配量#define QUEUE_INCREMENT 2 // 队列存储空间的分配增量struct SqQueue1(见图3.19){ QElemType *base; // 初始化的动态分配存储空间 int rear; // 尾指针原创 2014-08-17 21:25:27 · 856 阅读 · 0 评论 -
栈与递归的实现(Hanoi塔问题等等)
函数中有直接或间接地调用自身函数的语句,这样的函数称为递归函数。递归函数用得好,可简化编程工作。但函数自己调用自己,有可能造成死循环。为了避免死循环,要做到两点:(1) 降阶。递归函数虽然调用自身,但并不是简单地重复。它的实参值每次是不一样的。一般逐渐减小,称为降阶。如教科书式(33)的Ackerman 函数,当m≠0 时,求Ack(m,n)可由Ack(m-1,⋯)得到,Ac原创 2014-08-17 20:55:40 · 1038 阅读 · 1 评论 -
链队列-队列的链式表示和实现
// c3-2.h 单链队列--队列的链式存储结构typedef struct QNode // (见图3.12){ QElemType data; QNode *next;}*QueuePtr;struct LinkQueue // (见图3.13){ QueuePtr front,rear; // 队头、队尾指针};原创 2014-08-17 21:05:17 · 1319 阅读 · 0 评论 -
利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
// algo3-11.cpp 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)#include"c1.h"#include"func3-1.cpp"#define D 8 // 移动方向数,只能取4和8。(8个,可斜行;4个,只可直走)typedef struct // 定义队列元素和栈元素为同类型的结构体(见图3.38){ PosType seat; // 当前点的行值,列原创 2014-08-17 22:12:07 · 1114 阅读 · 1 评论 -
队列的顺序存储结构(出队元素时不移动元素,只改变队头元素的位置)
// c3-4.h 队列的顺序存储结构(出队元素时不移动元素,只改变队头元素的位置)#define QUEUE_INIT_SIZE 10 // 队列存储空间的初始分配量#define QUEUE_INCREMENT 2 // 队列存储空间的分配增量struct SqQueue2//(见图3.25){ QElemType *base; // 初始化的动态分配存储空间 int front;原创 2014-08-17 21:43:15 · 2179 阅读 · 0 评论 -
链栈
// bo3-5.cpp 链栈(存储结构由c2-2.h定义)的基本操作(4个)// 部分基本操作是由bo2-8.cpp中的函数改名得来// 另一部分基本操作是由调用bo2-8.cpp中的函数(取特例)得来typedef SElemType ElemType; // 栈结点类型和链表结点类型一致#include"c2-2.h" // 单链表存储结构typedef LinkList Link原创 2014-08-15 22:33:12 · 739 阅读 · 0 评论 -
栈的应用举例2(迷宫求解)
// func3-1.cpp、algo3-5.cpp、algo3-9.cpp和algo3-11.cpp要调用的函数、结构和全局变量struct PosType // 迷宫坐标位置类型(见图3.9){ int x; // 行值 int y; // 列值};#define MAXLENGTH 25 // 设迷宫的最大行列为25typedef int MazeType[MAXLENGTH]原创 2014-08-15 23:00:52 · 1229 阅读 · 0 评论 -
计算1-1/x+1/x*x
// algo1-1.cpp 计算1-1/x+1/x*x.#include#includevoid main(){timeb t1,t2;long t;double x,sum=1,sum1;int i,j,n;printf("请输入x n:");scanf("%lf%d",&x,&n);ftime(&t1); // 求得当前时间for(i=1;i<=n;i++){su原创 2014-08-15 22:00:24 · 960 阅读 · 0 评论 -
图的邻接表存储结构
// c7-2.h 图的邻接表存储结构(见图7.16)#define MAX_VERTEX_NUM 20enum GraphKind{DG,DN,UDG,UDN}; // {有向图,有向网,无向图,无向网}struct ArcNode{ int adjvex; // 该弧所指向的顶点的位置 ArcNode *nextarc; // 指向下一条弧的指针 InfoType *info;原创 2014-08-26 21:44:08 · 1846 阅读 · 0 评论 -
有向图的强连通分量(最小生成树)
// algo7-2.cpp 实现算法7.9的程序#include"c1.h"typedef int VRType;typedef char InfoType;#define MAX_NAME 3 // 顶点字符串的最大长度+1#define MAX_INFO 20 // 相关信息字符串的最大长度+1typedef char VertexType[MAX_NAME];#include原创 2014-09-09 12:31:22 · 2196 阅读 · 0 评论 -
树的存储结构(双亲表存储结构)
c6-4.h(见图627 所示)是用顺序结构存储树的。它是定长的(100 个结点),由n 来确定有效结点数。parent 域的值为-1 的是根结点。图628 是教科书中图6.13 所示之树及其双亲表存储结构。原创 2014-08-24 22:56:26 · 2773 阅读 · 0 评论 -
二叉树的三叉链表存储结构
// c6-6.h 二叉树的三叉链表存储结构(见图6.15)typedef struct BiTPNode{ TElemType data; BiTPNode *parent,*lchild,*rchild; // 双亲、左右孩子指针}BiTPNode,*BiPTree;二叉树的三叉链表存储结构比二叉链表多一个指向双亲结点的指针,因此,求双亲和左右兄弟都很容易。但在构造二叉树原创 2014-08-24 22:10:58 · 4915 阅读 · 0 评论 -
广义表的存储结构(广义表的递归算法,复制广义表,求广义表的深度)
// c5-5.h 广义表的头尾链表存储结构(见图5.16)enum ElemTag{ATOM,LIST}; // ATOM==0:原子,LIST==1:子表typedef struct GLNode{ ElemTag tag; // 公共部分,用于区分原子结点和表结点 union // 原子结点和表结点的联合部分 { AtomType atom; // atom是原子结点的值域,原创 2014-08-21 21:51:41 · 5182 阅读 · 0 评论 -
最优二叉树(赫夫曼树、赫夫曼树和赫夫曼编码的存储结构)
最优二叉树是带权路径长度最短的二叉树。根据结点的个数、权值的不同,最优二叉树的形状也各不相同。图634 是3 棵最优二叉树的例子。它们的共同特点是:带权值的结点都是叶子结点。权值越小的结点,其到根结点的路径越长。构造最优二叉树的方法如下:(1) 将每个带有权值的结点作为一棵仅有根结点的二叉树,树的权值为结点的权值;(2) 将其中两棵权值最小的树组成一棵新二叉树,新树的权值为两原创 2014-08-24 23:21:40 · 2121 阅读 · 0 评论