数据结构与算法(2)

                             数据结构与算法(2)
开发工具与关键技术:数据结构与总结
作者:昨夜星辰
撰写时间:2020年 05月 08日

一、 线性表的定义:线性表是由n个数据元素(结点)a1,a2,…,an组成的有限数列。该数列中的所有结点具有相同的数据类型。当n=0,称为空表。
1、线性表的特征:在非空的线性表,有且仅有一个开始结点a1它没有直接前趋,而仅有一个直接后继a2;有且仅有一个终端店an,它没有直接的后继,而仅有一个直接前趋an-1;其余的内部结点ai(2<i<n-1)有且仅有一个直接前趋ai-1和一个直接后继ai=1.
二、线性表的基本运算:
1、求表长–求线性表中元素的个数。
2、遍历—从左到右(或从右到左)扫描(或读取)表中的个元素
3、按编号查找—找出表中的第i个元素。
4、按特征查找—按某个特定值查找线性表。
5、插入—在第i个位置上(即原第i个元素前插入一个元素)。
6、删除—删除原表中的第i个元素。
7、排序—按元素某特征值的递增(或递减)排序,重排表中各元素。
三、顺序表是很守规矩的,每个元素都强有序、整整齐齐的站在一起.
1、线性表的顺序存储结构
顺序存储:把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。
特点:线性表的逻辑顺序与物理顺序一致.数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现。
线性表的顺序存储结构是随机存储的存储结构。链式存储结构是顺序存储的存储结构。
顺序存储结构的地址在内存中是连续的,所以可以通过计算地址实现随机存取,而链式存储地址不一定连续,只能通过结点的指针顺序存取
2、线性表的链式存储结构:
用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性表简称线性链表。
存储链表中结点的一组任意的存储单元可以是连续的,也可以不连续,甚至是零散分布在内存中的任意位置上的。
链表中结点的逻辑顺序和物理顺序不一定相同。
静态链表是用类似于数组方法实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配地址空间大小。所以静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针。
动态链表是用内存申请函数(malloc/new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态申请内存的,所以每个节点的物理地址不连续,要通过指针来顺序访问。
3、链表:链表不是地址连续的空间,他的插入和删除不需要移动元素,它看到内存有空余地址就可以毫无顾忌地挤进去,所以我们叫它”调皮的链表“
4、单链表的结构:单链表中的构成链表的节点只有一个指向直接后继节点的指针域。其结构特点:逻辑上相邻的数据元素在物理上不一定相邻。
5、链表上实现插入和删除运算,无需移动结点,仅需修改指针。解决了顺序表的插入和删除操作需要移动大量元素的问题。
四、堆栈的定义:堆栈简称为栈,是限定只能在表的一段进行插入和删除操作的线性表。在表中,允许插入和删除的一端称作为“栈底”。通常将原素插入栈顶的操作为“入栈”(进栈或压栈),称删除栈顶元素的操作为“出栈”。
1、堆栈的特点是“后进先出”。它后面来,反而他能最先走,所以我们说他是“蛮不讲理的堆栈”。
2、 堆栈的基本运算:
(1) StackInit()初始化堆栈。
(2)StackEmpty(s)判定栈s是否为空
(3)StackLength(s)求堆栈s的长度
(4)GetTop(s)或取栈顶元素的值。
(5)Push(s,e)将元素e进栈。
(6)Pop(s)出栈(删除栈顶元素)。
3、堆栈的存储方式:
顺序栈:采用顺序结构存储,栈的顺序存储结构称为顺序栈,和线性表类似,用一维数组来存储栈。根据数组是否可以根据需要增大,又可分为静态顺序栈和动态顺序栈。
链栈:采用链式结构存储,栈的链式存储结构称为链栈,是运算受限的单链表。其插入和删除
操作只能在表头位置进行。因此,链栈没有必要像单链表一样附加头结点,栈顶指针top就是链表的头指针。
五、队列:队列的特点是“先进先出”这符合我们排队的思想,也乖乖守规矩,队列简称为队,是限定只能在表的一端做插入运算、在另一端作删除运算的线性表;
在表中,允许插入的一端称作”对尾”,允许删除的另一端称作“队首(“或对头”)”
通常将元素插入对尾操作称为入队列,称删除队首元素的操作为出队列。
1、队列的存储方式:(1)顺序队列—采用顺序结构存储.(2)链式队列-采用链式结构存储
六、串的定义:串是字符串的简称。在数据结构中,串是一种在数据元素的组成上具有一定约束条件的线性表,即要求组成线性表的所有数据元素都是字符,所以说串是一个有穷的字符序列。串是由零个或多个字符组成的有限序列,记作s=”s0s1…sn-1”(n≥0),其中s是串名,字符个数n称作串的长度,双撇号括起来的字符序列”s0s1…sn-1”是串的值。每个字符可以是字母、数字或任何其它的符号。零个字符的串(即:””)称为空串,空串不包含任何字符。
串的操作集合包括:1.初始化串,2.赋值,3.求串长度,4.比较:有相等和不相等两种比较结果,还有大于小于等于三种比较结果,5.插入,6.删除,7.取子串8.查找子串,9.替换子串。
注意:空串是任意串的子串,任意串是其自身的子串。
通常在程序中使用的串可分为两种:串变量和串常量:
串的存储表示和实现————两种存储结构:顺序和链式。

串的基本概念:
串;是由n(n>0)个字符串组成的有限序列。(它是数据元素为单个字符的特殊线性表)。
串长:串中字符的个数(n>0)。
空串:串中字符个数为0时称为空串。
空白串:由一个或多个空格符组成的串。
子串:串S中任意个连续的字符序列叫S的子串;S叫主串。
子串位置:子串的第一个字符在主串中的序号。
字符位置:字符在串中的序号。
串相等:串长度相等,且对应位置上字符相等(即两个串中的字符序列—对应相等)。
串和线性表的比较:
相同之处:都是线性结构,
不同之处:线性表的数据元素类型为任意类型;而串的数据 元素类型为字符类型,线性表的插入和删除操作都是对一个数据元素;而串的插入和删除操作都是对一个字符串进行的,串还有一些不同于瞎按性别的其它操作。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值