自定义博客皮肤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 843

原创 数据结构第二十二节

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

2021-12-11 16:04:27 261

原创 数据结构第二十一节

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 969

原创 数据结构第二十节

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

2021-12-01 19:31:42 245

原创 数据结构第十九节

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

2021-12-01 19:29:30 125

原创 数据结构第十八节

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

2021-11-27 19:10:37 166

原创 数据结构第十七节

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

2021-11-27 19:09:46 111

原创 数据结构第十六节

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 37

原创 数据结构第十五节

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

2021-11-15 22:05:32 288

原创 数据结构第十四节

栈的链式实现可采用与改进的线性表一样有两个指针。分别指向栈底头节点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 375

原创 数据结构第十三节

#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 218 1

原创 数据结构第十二节

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

2021-11-04 20:32:41 110

原创 数据结构第十一节

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 48

原创 数据结构第十节

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 38

原创 数据结构第九节

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 78

原创 数据结构第八节

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

2021-10-20 19:14:18 34

原创 数据结构第七节

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

2021-10-20 19:13:42 44

原创 数据结构第六节

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

2021-10-19 21:11:38 65

原创 数据结构第五节

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 36

原创 数据结构第四节

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 36

原创 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 34

原创 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 59

原创 2021.9.13 数据结构第一节

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

2021-09-20 14:44:06 86

空空如也

空空如也

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

TA关注的人

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