自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 数据结构第二十三节

实现方法:系统提供一个空间足够大且地址连续的存储空间(称为“堆”) 供串使用。可使用C语言的动态存储分配函数malloc()和free()来管理 串的堆式存储结构的类型定义 typedef struct { char *ch; /* 若非空,按长度分配,否则为NULL */ int length; /* 串的长度 */ } HString ; 4.2.3 串的链式存储表示 的链式存储结构和线性表的串的链式存储结构类似,采用单链表来存 储串,结点的构成是: ◆ data域:存放字符,data域可存放的字

2021-12-13 14:28:36 870

原创 数据结构第二十二节

4.2 串的存储表示和实现 ◆ 定长顺序存储表示:将串定义成字符数组,利用串名可以直接访问 串值。用这种表示方式,串的存储空间在编译时确定,其大小不能改变。 ◆ 堆分配存储方式:仍然用一组地址连续的存储单元来依次存储串中的字 符序列,但串的存储空间是在程序运行时根据串的实际长度动态分配的。 ◆ 块链存储方式:是一种链式存储结构表示。 4.2.1 串的定长顺序存储表示 定长顺序存储结构定义为: #define MAX_STRLEN 256 typedef struct { char str[MAX_STR

2021-12-11 16:04:27 270

原创 数据结构第二十一节

4.1.2 串的抽象数据类型定义 ADT String{ 数据对象:D = { ai|ai∈CharacterSet, i=1,2,…,n, n ≥0 } 数据关系:R = {<ai-1, ai>| ai-1, ai∈D, i=2,3,…,n } 基本操作: StrAssign(t , chars) 初始条件: chars是一个字符串常量。 操作结 果:生成一个值为chars的串t 。 StrConcat(s, t) 初始条件:串s, t 已存 在。 操作结果:将串t联结到串s后形成新串存放到

2021-12-11 16:03:33 999

原创 数据结构第二十节

第四章 字符串 4.1 串类型的定义 4.1.1 串的基本概念 串(字符串):是零个或多个字符组成的有限序列。记作: S=“a1a2a3…”,其中S是串名,ai(1≦i≦n)是单个,可以是字母、数字或其它 字符。 串值:双引号括起来的字符序列是串值。 串长:串中所包含的字符 个数称为该串的长度。 空串(空的字符串):长度为零的串称为空串,它不 包含任何字符。 空子串(substring):串中任意个连续字符组成的子序列称 为该串的子串,包含子串的串相应地称为主串。 子串的序号:将子串在主 串中首次出现时的该

2021-12-01 19:31:42 257

原创 数据结构第十九节

3.3.3 队列的链式表示和实现 1 队列的链式存储表示 队列的链式存储结构简称为链队列,它是限制仅在表头进行删除操作 和表尾进行插入操作的单链表。 数据元素结点类型定义: typedef struct Qnode { ElemType data ; struct Qnode *next ; }QNode ; ...

2021-12-01 19:29:30 133

原创 数据结构第十八节

“假溢出”现象 顺序队列中存在“假溢出”现象。因为在入队和出队操作中,头、尾指针 只增加不减小,致使被删除元素的空间永远无法重新利用。因此,尽管队 列中实际元素个数可能远远小于数组大小,但可能由于尾指针巳超出向量 空间的上界而不能做入队操作。该现象称为假溢出。如图所示是数组大小 为5的顺序队列中队首、队尾指针和队列中元素的变化情况。 3.2.2.2 循环队列 为充分利用向量空间,克服上述“假溢出”现象的方法是:将为队列分配 的向量空间看成为一个首尾相接的圆环,并称这种队列为循环队列 (Circular Q

2021-11-27 19:10:37 175

原创 数据结构第十七节

3.2.2 队列的顺序表示和实现 3.2.2.1 队列的顺序存储结构 利用一组连续的存储单元(一维数组) 依次存放从队首到队尾的各个元 素,称为顺序队列。 #define MAX_QUEUE_SIZE 100 typedef struct queue { ElemType Queue_array[MAX_QUEUE_SIZE] ; int front ; int rear ; }SqQueue; 设立一个队首指针front ,一个队尾指针rear ,分别指向队首和队尾 元素。 ◆ 初始化:front

2021-11-27 19:09:46 119

原创 数据结构第十六节

2 队列的抽象数据类型定义 ADT Queue{ 数据对象:D ={ ai|ai∈ElemSet, i=1, 2, …, n, n >= 0数据关系:R = {<ai-1, ai> | ai-1, ai∈D, i=2,3,…,n } 约定a1端为队首, an端为队尾。 基本操作: Create():创建一个空队列; EmptyQue():若 队列为空,则返回true ,否则返回flase ; ⋯⋯ InsertQue(x) :向队尾插 入元素x; DeleteQue(x) :删除队首元素x

2021-11-18 20:07:54 45

原创 数据结构第十五节

3.1.5.2 括号匹配问题 在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个 表达式中的括号是否相匹配? 匹配思想:从左至右扫描一个字符串(或表达式),则每个右括号将与最 近遇到的那个左括号相匹配。则可以在从左至右扫描过程中把所遇到的左 括号存放到堆栈中。每当遇到一个右括号时,就将它与栈顶的左括号(如果 存在)相匹配,同时从栈顶删除该左括号。 算法思想:设置一个栈,当读到 左括号时,左括号进栈。当读到右括号时,则从栈中弹出一个元素,与读 到的左括号进行匹配,若匹配成功,继续读入;否则匹配失败,

2021-11-15 22:05:32 296

原创 数据结构第十四节

栈的链式实现可采用与改进的线性表一样有两个指针。分别指向栈底 头节点base和栈顶top节点。保留栈内元素个数变量length。使用常规链接 方法建立的链表,如下图左,在压栈操作时是O(1)速度,但是弹栈操作要 找到top的前驱节点,所以速度是O(n),为了加快弹栈速度可以采用,下图 右边所示存储方案,可以把链表反向链接,这样就可以提高弹栈的速度 了,并且其他性能不变。 3.1.5 栈应用实例 3.1.5.1 进制转换 进制转换是计算机中常用的一种操作,如果将10进制数转换为N进制 的数(保证N小于10)我

2021-11-10 21:35:54 402

原创 数据结构第十三节

#define STACK_SIZE 100 /* 栈初始向量大小 */ #define STACKINCREMENT 10 /* 存储空间分配增量 */ #typedef int ElemType ; typedef struct sqstack { ElemType *bottom; /* 栈不存在时值为NULL */ ElemType *top; /* 栈顶指针 */ int stacksize ; /* 当前已分配空间,以元素为单位 */ }SqStack ; 3.1.3.2 栈的静态顺序存储表示

2021-11-08 21:27:03 267 1

原创 数据结构第十二节

栈的顺序存储结构简称为顺序栈,和线性表相类似,用一维数组来存 储栈。 ◆ 静态顺序栈 实现简单,但不能根据需要增大栈的存储空间; ◆ 动态顺序栈 可以根据需要增大栈的存储空间,但实现稍为复杂。base和top指针分别指向在堆中分配数组表示栈的栈顶和栈底, stacksize表示栈空间的大小。当初始化栈时InitStack,从堆中分配 STACK_INIT_SIZE大小的空间。当执行压栈操作时查看空间容量stacksize 够不够,如果不够将堆空间从新分配增加STACKINCREMENT存入数据。 base和

2021-11-04 20:32:41 124

原创 数据结构第十一节

3.1 栈 3.1.1 栈的基本概念 栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为 后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性 表。 栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指 针(top)来指示栈顶元素。 栈底(Bottom):是固定端,又称为表头。 空 栈:当表中没有元素时称为空栈。 设栈S=(a1,a2,…an),则a1称为栈底元素,an为栈顶元素,如图所 示。 typedef

2021-10-28 22:26:30 55

原创 数据结构第十节

1.查找运算 (1)按序号查找 GET(L,i) 给定一个序号,在单链表中查找该序号 对应的结点, 若结点存在,则返回该结点的指针,否则返回空指针 (2)按值查找 LOCATE(head,key) 2.单链表的插入 1)后插操作: 在指针p所指结点之后插入 2)前插操作: 在指针p所指结点之前插入3.删除运算 删除指定结点的直接后继 2.4线性表的其它链式表示 2.4.1 单循环链表 循环链表(Circular Linked List):是一种头尾相接的链表。其特点是最 后一个结点的指针域指向链表的头结点,

2021-10-21 18:55:34 46

原创 数据结构第九节

2.3.2.1 存储结构表示 结点是通过动态分配和释放来的实现,即需要时分配,不需要时释 放。实现时是分别使用C语言提供的标准函数:malloc() ,realloc(), sizeof() ,free() . 动态分配 p=(LNode*)malloc(sizeof(LNode)); typedef int ElemType; typedef struct Lnode { ElemType data; /*数据域,保存结点的值 */ struct Lnode *next; /*指针域*/ }LNode;

2021-10-21 18:54:56 85

原创 数据结构第八节

2.3.1 线性表的链式存储结构 1、链式存储:用一组任意的存储单元存储线性表, 逻辑上相邻的结点 在物理位置上不一定相邻,结点间的逻辑关系由存储结点时附加的指针字 段表示 2、链表:采用链式存储方法的线性表称为链表。 3、每一个结只包含一个指针域的链表,称为单链表 为了正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须 存储指示其直接后继结点的地址(或位置),称为指针(pointer)或链(link), 这两部分组成了链表中的结点结构链表结点结构 data :数据域,存放结点的值。next :指针域

2021-10-20 19:14:18 40

原创 数据结构第七节

2.2.2 顺序表的基本操作 数组具有天然的线性表特点,因为其在内存中的存储位置是连续的, 存储结构特点上能保证数据的有序性,只要存入数组的数据从0开始紧凑存 储就是顺序表实现了。 此外普通的数组一旦创建其空间大小不能变化,所以在线性表实现中 利用堆增加动态调整大小功能。在堆中分配空间的数组只是一个指向堆空间首地址的指针,对空间容 量是不知道的,所以需要额外保存一个堆空间大小的变量。另外为了保持 顺序表的内存储数据的有序性和可计数性,需要保存线性表内元素个数信 息。创建的数组只是保存数据元素的空间,为了将线

2021-10-20 19:13:42 50

原创 数据结构第六节

2.2 线性表的顺序存储2.2.1 线性表的顺序存储结构 1、顺序存储:将线性表的结点按逻辑次序依次存放在一组地址连续的 存储单元里 2、顺序表:采用顺序存储方法存储的线性表称顺序表。 3、存储地址的计算: LOC(ai+1)=LOC(ai)+c LOC(ai)=LOC(a1)+(i-1)*c 1<=i<=n 这里:LOC(a1)为结点a1的存储起 址(基地址),c为每个结点所占存储单元数。 顺序表的优点: (1)无须增加额外的存储空间表示结点间的逻辑关 系。 (2)可以方便地随机存取表中任一

2021-10-19 21:11:38 83

原创 数据结构第五节

2.1.2 线性表的抽象数据类型定义 线性表的抽象数据类型定义为(伪代码) ADT List{ 数据对象:D = { ai | ai∈ElemSet, i=1,2,…,n, n≧0 } 数据关系:R = {<ai-1, ai> | ai-1, ai∈D, i=2,3,…,n } 数据操作: InitList(); //初始化 DestroyList(); //销毁 ClearList(); //清除 ListEmpty(); //判断是否为空 ListLength(); //长度 GetElem

2021-10-19 21:10:43 39

原创 数据结构第四节

2.1 线性表的概念及运算 线性表内存储的元素是同一种数据类型的数据对象,相邻数据元素之 间存在顺序关系。由这样特点的数据特征元素相同的元素构成的有限序列 成为线性表。 2.1.1 线性表的定义(逻辑结构) 线性表(Linear List) :是由n(n≧0)个数据元素(结点)a1,a2, …an组 成的有限序列。该序列中的所有结点具有相同的数据类型。其中数据元素 的个数n称为线性表的长度。 当n=0时,称为空表。 当n>0时,将非空的线性表记作: (a1,a2,… an)注意: 1.数据元素ai是一

2021-10-19 21:09:24 39

原创 2021.9.18 数据结构第三节

第三章 栈和队列 栈(Stack):是限制在表的一端进行插入和删除操作的线性表。又称为 后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性 表。 栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指 针(top)来指示栈顶元素。 栈底(Bottom):是固定端,又称为表头。 空 栈:当表中没有元素时称为空栈。 #include <stdio.h>#include <stdlib.h>/*InitL

2021-09-20 14:57:45 37

原创 2021.9.15 数据结构第二节

数据结构的主要运算包括: ⑴ 建立(Create)一个数据结构; ⑵ 消除(Destroy)一个数据结构; ⑶ 从一个数据结构中删除(Delete)一个数据元素; ⑷ 把一个数据元素插入 (Insert)到一个数据结构中; ⑸ 对一个数据结构进行访问(Access); ⑹ 对 一个数据结构(中的数据元素)进行修改(Modify); ⑺ 对一个数据结构进行排序(Sort); ⑻ 对一个数据结构进行查找(Search)。 数据结构:O(i)<o(logn)<o(n)<o(nlogn)<

2021-09-20 14:51:30 65

原创 2021.9.13 数据结构第一节

基本概念和术语 一1.数据定义:数据即信息的载体,是对观事物的符号表示,指能输入到计算机中并能被计算机处理的符号的总称、整数,实数,字符,文字,声音,图形及图像等都是数据、简言之,数据是能输入到试算机的符号集合 2.数据元素 定义:数据元素是数据的基本单位。它在计算机处理和程序设计中通常被作为一个整体进行考虑和处理 3.数据项 定义:数据是数据的不可分割的最小单位,一个数据元素可由若干个数据项组成 4数据对象 定义数据对象是具有相同特征的数据元素的集合,数据的一个子集。 5数据结构 定义:数据结..

2021-09-20 14:44:06 99

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除