
数据结构之严蔚敏
文章平均质量分 73
sjmp
屌丝男
展开
-
3.4.3 循环队列之静态存储空间(2)
在循环队列中,队尾指针可能小于队头指针。入队指针时,队尾指针加一。当队列满时,队尾指针等于对头指针,和队列空的条件是一样的。为了区分队满与队空,在循环队列中,少用一个存储单元,也就是在最大存储空间为MAX_QSIZE的循环队列中,最多只能存放MAX_QSIZE-1个元素。这样,队列空的条件任为队尾指针等于对头指针,队列满的条件改为(队尾指针+1)对MAX_QSIZE求余等于对头指针。原创 2012-11-07 22:27:15 · 2186 阅读 · 0 评论 -
algo3-3-10.c Hanoi塔问题 (没仔细看)
/* algo3-10.c Hanoi塔问题,调用算法3.5的程序 */ #include int c=0; /* 全局变量,搬动次数 */ void move(char x,int n,char z) { /* 第n个圆盘从塔座x搬到塔座z */ printf("第%i步: 将%i号盘从%c移到%c\n",++c,n,x,z); } void hanoi(int原创 2012-11-07 20:55:49 · 690 阅读 · 0 评论 -
main3-4.c 检验bo3-2.c的主程序
/* main3-2.c 检验bo3-2.c的主程序 */ #include"c1.h" typedef int QElemType; #include"c3-2.h" #include"bo3-2.c" void print(QElemType i) { printf("%d ",i); } void main() { int i; Q原创 2012-11-07 21:26:38 · 735 阅读 · 0 评论 -
3.4 队列
和栈相反,队列(queue)是一种先进先出(FIFO)的线性表。 在队列中,允许插入的一端叫做队尾(rear),允许删除的一端叫做对头(front). 队列在程序设计中最典型的例子就是操作系统中的作业排队。在允许多道程序运行的计算机系统中,同时又几个作业运行。如果运行的结果都需要通过通道输出,那就要按请求输出的先后次序排队。 链队列-------队列的原创 2012-11-07 21:23:07 · 592 阅读 · 0 评论 -
3.3 栈与递归的实现 (还没仔细看,消化)
栈还有一个重要的应用时在程序设计语言中实现递归。一个直接调用自己或者通过一系列的调用语句间接的调用自己的函数,称作递归函数。 递归是程序设计中的一个强有力的工具。其一:有许多数学函数式递归的,如f(n)=n*f(n-1)其二:有的数据结构,如二叉树,广义表等,由于结构本身固有的递归特性,则他们的操作可递归的描述;其三:还有一类问题,虽然问题本身没有明显的递归结构,单用递归求原创 2012-11-06 22:03:15 · 1124 阅读 · 0 评论 -
algo3-3-9.c 用递归函数求解迷宫问题(求出所有解) (没仔细看了)
/* algo3-9.c 用递归函数求解迷宫问题(求出所有解) */ #include"c1.h" /* 根据《PASCAL程序设计》(郑启华编著)中的程序改编 */ #include"func3-1.c" /* 定义墙元素值为0,可通过路径为-1,通过路径为足迹 */ void Try(PosType cur,int curstep) { /* 由当前位置cur、当前步骤curs原创 2012-11-07 20:50:16 · 1736 阅读 · 0 评论 -
bo3-4.c 用单链表的基本操作实现链队列(存储结构由c3-2.h定义)的基本操作(9个)
由c3-2.h和c2-2.h对比可见,单链队列和单链表结构有相同之处。单链队列是带有头结点的单链表。他的头指针相当于单链表的头指针。因此队列操作时线性表操作的子集,所以bo3-2.c中的基本操作也可以用单链表的基本操作来代替。这样既可以充分利用现有资源,减小编程工作量,又可以更清楚的看出队列和线性表的内在联系和共性。 /* bo3-6.c 用单链表的基本操作实现链队列(存储结构由c3-2.h定原创 2012-11-07 21:43:13 · 1296 阅读 · 1 评论 -
3.2栈的应用举例----数制转换、括号匹配及行编辑
(1) 十进制转换为进制N(2~9) /* algo3-1.c 调用算法3.1的程序 */ #define N 2 /* 定义待转换的进制N(2~9) */ typedef int SElemType; /* 定义栈元素类型为整型*/ #include"c1.h" #include"c3-1.h" /* 采用顺序栈*/ #include"bo3-1.c" /* 利用顺序栈的原创 2012-11-06 21:13:05 · 1179 阅读 · 0 评论 -
bo3-1-1.c 链栈(存储结构由c2-2.h定义)的基本操作(4个) 及验证
/* bo3-5.c 链栈(存储结构由c2-2.h定义)的基本操作(4个) */ /* 部分基本操作是由bo2-8.cpp中的函数改名得来 */ /* 另一部分基本操作是由调用bo2-8.cpp中的函数(取特例)得来 */ typedef SElemType ElemType; /* 栈结点类型和链表结点类型一致 */ #include"c2-2.h" /* 单链表存储结构 */原创 2012-11-06 20:39:28 · 869 阅读 · 0 评论 -
3.2.5 表达式求解
/* func3-2.c algo3-6.c和algo3-7.c要调用的函数 */ char Precede(SElemType t1,SElemType t2) { /* 根据教科书表3.1,判断t1,t2两符号的优先关系('#'用'\n'代替) */ char f; switch(t2) { case '+': case '-':if(t原创 2012-11-06 22:02:32 · 810 阅读 · 0 评论 -
3.4.3 循环队列--------队列的顺序表示与实现(1)
队列的顺序表示为什么要采用循环方式呢?首先分析非循环顺序队列的表示和实现以及他们存在的问题。 /* c3-5.h 队列的顺序存储结构(非循环队列,队列头元素在[0]单元) */ #define QUEUE_INIT_SIZE 10 /* 队列存储空间的初始分配量 */ #define QUEUE_INCREMENT 2 /* 队列存储空间的分配增量 */ typedef struc原创 2012-11-07 22:26:58 · 980 阅读 · 0 评论 -
3.4.3 循环队列之动态存储空间 (3 )
/* c3-4.h 队列的顺序存储结构(出队元素时不移动元素,只改变队头元素的位置) */ #define QUEUE_INIT_SIZE 10 /* 队列存储空间的初始分配量 */ #define QUEUE_INCREMENT 2 /* 队列存储空间的分配增量 */ typedef struct { QElemType *base; /* 初始化的动态分配存储空间 */原创 2012-11-10 15:01:07 · 1811 阅读 · 0 评论 -
algo3-4-3.c 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
/* algo3-11.c 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径) */ #include"c1.h" #include"func3-1.c" #define D 8 /* 移动方向数,只能取4和8。(8个,可斜行;4个,只可直走) */ typedef struct /* 定义队列元素和栈元素为同类型的结构体 */ { PosType seat; /原创 2012-11-10 15:04:15 · 1101 阅读 · 0 评论 -
5.5 广义表的存储结构
/* c5-5.h 广义表的头尾链表存储表示 */ typedef enum{ATOM,LIST}ElemTag; /* ATOM==0:原子,LIST==1:子表 */ typedef struct GLNode { ElemTag tag; /* 公共部分,用于区分原子结点和表结点 */ union /* 原子结点和表结点的联合部分 */ { A原创 2012-11-18 15:49:24 · 8907 阅读 · 3 评论 -
第五章 数组与广义表
/* c5-1.h 数组的顺序存储表示 */ #include /* 标准头文件,提供宏va_start,va_arg和va_end, */ /* 用于存取变长参数表 */ #define MAX_ARRAY_DIM 8 /* 假设数组维数的最大值为8 */ typedef struct { ElemType *base; /* 数原创 2012-11-12 22:01:01 · 807 阅读 · 0 评论 -
5.2 变长参数表(函数的实参个数可变)编程示例
/* algo5-2.c 变长参数表(函数的实参个数可变)编程示例 */ #include"c1.h" #include /* 实现变长参数表要包括的头文件 */ typedef int ElemType; ElemType Max(int num,...) /* ...表示变长参数表,位于形参表的最后,前面必须有至少一个固定参数 */ { /* 函数功能:返回num个数中的最原创 2012-11-17 12:04:00 · 985 阅读 · 0 评论 -
4.2.2 堆分配存储结构
/* c4-2.h 串的堆分配存储 */ typedef struct { char *ch; /* 若是非空串,则按串长分配存储区,否则ch为NULL */ int length; /* 串长度 */ }HString;原创 2012-11-11 12:48:45 · 1049 阅读 · 0 评论 -
3.5 离散事件模拟--银行业务模拟程序
p130原创 2012-11-10 15:37:34 · 1516 阅读 · 0 评论 -
4.4 串操作应用举例 还没仔细看
4.4.1 文本编辑 /* algo4-2.c 文本行编辑 */原创 2012-11-11 14:56:40 · 689 阅读 · 0 评论 -
4.3 串的模式匹配算法 没仔细看了
p159原创 2012-11-11 13:53:56 · 666 阅读 · 0 评论 -
第四章 串
字符串一般简称为串。计算机上非数值处理的对象基本上是字符串数据。串(string)(或字符串)是由0个或多个字符组成的有限序列。 /* c4-1.h 串的定长顺序存储表示 */ #define MAX_STR_LEN 40 /* 用户可在255(1个字节)以内定义最大串长 */ typedef char SString[MAX_STR_LEN+1]; /* 0号单元存原创 2012-11-11 11:43:18 · 1037 阅读 · 0 评论 -
4.2.3 串的块链存储表示
串结构的特殊性------结构中的每个数据元素是一个字符,则用链表存储串值时,存在一个“结点大小”的问题,即每个结点可以存放一个字符,也可以存放多个字符。 /* c4-3.h 串的块链存储表示 */ #define CHUNK_SIZE 4 /* 可由用户定义的块大小 */ typedef struct Chunk { char ch[CHUNK_SIZE]; st原创 2012-11-11 13:40:27 · 4807 阅读 · 1 评论 -
3.1.2顺序栈(存储结构由c3-1.h定义)的基本操作
/* bo3-1.c 顺序栈(存储结构由c3-1.h定义)的基本操作(9个) */ void InitStack(SqStack *S) { /* 构造一个空栈S */ (*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!(*S).base) exit(OVERFLOW);原创 2012-11-06 20:12:48 · 1034 阅读 · 0 评论 -
3.2.4 迷宫求解
/* func3-1.c algo3-5.c、algo3-9.c和algo3-11.c要调用的函数、结构和全局变量 */ typedef struct { int x; /* 行值 */ int y; /* 列值 */ }PosType; /* 迷宫坐标位置类型 */ #define MAXLENGTH 25 /* 设迷宫的最大行列为25 */ typedef原创 2012-11-06 21:57:21 · 912 阅读 · 0 评论 -
2.3.4 实际应用的线性链表
前面介绍的线性链表比较简单,不能满足实际的需要。存在3个问题:1、只有头指针,没有尾指针,如果在表尾插入结点,则效率低。2、求表长从表头到表尾效率也很低。3、基本操作函数较少。 c2-5.h从实际角度出发从新定义线性链表的类型。 /* c2-5.h 带头结点的线性链表类型 */ typedef struct LNode /* 结点类型,图2-40 */ {原创 2012-11-03 22:00:18 · 766 阅读 · 0 评论 -
2.4 一元多项式的表示及相加
/* c2-6.h 抽象数据类型Polynomial的实现 */ typedef struct /* 项的表示,多项式的项作为LinkList的数据元素 */ { float coef; /* 系数 */ int expn; /* 指数 */ }term,ElemType; /* 两个类型名:term用于本ADT,ElemType为LinkList的数据对象名 */原创 2012-11-03 22:29:57 · 813 阅读 · 0 评论 -
2.3.3 双向链表
/* c2-4.h 线性表的双向链表存储结构 */ typedef struct DuLNode { ElemType data; struct DuLNode *prior,*next; }DuLNode,*DuLinkList; /* bo2-5.c 带头结点的双向循环链表(存储结构由c2-4.h定义)的基本操作(14个),包括算法2.18,原创 2012-11-03 21:30:49 · 650 阅读 · 0 评论 -
algo2-3-1.c 教科书中图2.10 静态链表示例
/* c1.h (程序名) */ #include #include #include /* malloc()等 */ #include /* INT_MAX等 */ #include /* EOF(=^Z或F6),NULL */ #include /* atoi() */ #include /* eof() */ #include /* floor(),ceil(原创 2012-10-28 20:54:39 · 721 阅读 · 0 评论 -
main2-3-2.c 两个仅设表尾指针的循环链表的合并(教科书图2.13)
/* algo2-10.c 两个仅设表尾指针的循环链表的合并(教科书图2.13) */ #include"c1.h" typedef int ElemType; #include"c2-2.h" #include"bo2-4.c" #include"func2-3.c" /* 包括equal()、comp()、print()、print2()和print1()函数 */ v原创 2012-11-03 21:12:54 · 2297 阅读 · 0 评论 -
main2-3-2.c 单循环链表
/* main2-4.c 单循环链表,检验bo2-4.c的主程序 */ #include"c1.h" typedef int ElemType; #include"c2-2.h" #include"bo2-4.c" #include"func2-3.c" /* 包括equal()、comp()、print()、print2()和print1()函数 */ int main(原创 2012-11-03 20:34:55 · 3096 阅读 · 0 评论 -
algo2-3.c
/* algo2-5.c 实现算法2.11、2.12的程序 */ #include"c1.h" typedef int ElemType; #include"c2-2.h" #include"bo2-2.c" #include"func2-3.c" /* 包括equal()、comp()、print()、print2()和print1()函数 */ void CreateL原创 2012-10-28 20:26:18 · 669 阅读 · 0 评论 -
2.3.2 循环链表及基本操作
/* c2-2.h 线性表的单链表存储结构 */ typedef struct LNode { ElemType data; struct LNode *next; }; typedef struct LNode *LinkList; /* 另一种定义LinkList的方法 */ 最后一个结点的next域指向头结点。单循环链表往往设立尾指针而不原创 2012-11-03 19:58:18 · 653 阅读 · 0 评论 -
algo2-3-1.c 利用无头结点的单链表结构处理教科书图2.1(学生健康登记表)
/* algo2-6.c 利用无头结点的单链表结构处理教科书图2.1(学生健康登记表) */ #include"c1.h" #define NAMELEN 8 /* 姓名最大长度 */ #define CLASSLEN 4 /* 班级名最大长度 */ typedef struct { char name[NAMELEN+1]; /* 包括'\0' */ long原创 2012-10-28 20:54:07 · 1625 阅读 · 0 评论 -
main2-3-3.c 检验bo2-5.c的主程序
/* main2-3-3.c 检验bo2-5.c的主程序 */ #include"c1.h" typedef int ElemType; #include"c2-4.h" #include"bo2-5.c" #include"func2-3.c" /* 包括equal()、comp()、print()、print2()和print1()函数 */ int main()原创 2012-11-03 21:42:06 · 724 阅读 · 0 评论 -
main2-3-4.c 检验bo2-6.c的主程序
/* main2-3-4.c 检验bo2-6.c的主程序 */ #include"c1.h" typedef int ElemType; #include"c2-5.h" #include"bo2-6.c" #include"func2-3.c" /* 包括equal()、comp()、print()、print2()和print1()函数 */ int main()原创 2012-11-03 22:15:42 · 453 阅读 · 0 评论 -
main2-4.c 检验bo2-7.c的主程序
/* main2-4.c 检验bo2-7.c的主程序 */ #include"c1.h" #include"c2-6.h" #include"bo2-7.c" iint main() { polynomial p,q; int m; printf("请输入第1个一元多项式的非零项的个数:"); scanf("%d",&m); CreatP原创 2012-11-03 22:46:34 · 1226 阅读 · 0 评论 -
第三章 栈与队列
栈与队列是两种重要的线性结构。从数据结构角度看,栈与队列也是线性表,他们是操作受限的线性表,因此,可称为是限定性的数据结构。/* c3-1.h 栈的顺序存储表示 */ #define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */ #define STACK_INCREMENT 2 /* 存储空间分配增量 */ typedef struct SqSta原创 2012-11-03 22:47:30 · 428 阅读 · 0 评论 -
2.3、线性表的链式表示与实现
在线性表的顺序表示与实现中,逻辑关系上相邻的两个元素在物理位置上也相邻。 优点:可以随机存取表中任一元素,他的存储公式可用一个简单、直观公式表示。 缺点:在做插入或者删除时,需要移动大量的元素。 链式存储结构,逻辑上相邻的元素物理位置不一定相邻,因此没有顺序表的缺点,但是没有顺序表随机存取的优点。 为了表示每个元素ai与原创 2012-10-28 19:03:51 · 1063 阅读 · 0 评论 -
func2-3-1.c 不带头结点的单链表的扩展操作
/* func2-1.c 不带头结点的单链表(存储结构由c2-2.h定义)的扩展操作(3个) */ /* algo2-6.c和bo7-2.c用到 */ void InsertAscend(LinkList *L,ElemType e,int(*compare)(ElemType,ElemType)) { /* 按关键字非降序将e插入表L。函数compare()返回值为:形参1的关键字-原创 2012-10-28 20:43:57 · 783 阅读 · 0 评论 -
Algo2-2.c
/* algo2-4.c 修改算法2.7的第一个循环语句中的条件语句为开关语句,且当 */ /* *pa=*pb时,只将两者中之一插入Lc。此操作的结果和算法2.1相同 */ #include"c1.h" typedef int ElemType; #include"c2-1.h" #include"bo2-1.c" #include"func2-3.c" /* 包括equ原创 2012-10-28 17:46:55 · 872 阅读 · 0 评论