数据结构之线性表、栈、队列

线性表

一、定义

线性表是n个数据元素的有限序列。

二、线性表的顺序表示和实现

即用一组地址连续的储存单元依次存储线性表的数据元素。以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。即是用我们熟悉的C/C++中的数组存储数据元素。只要确定了数据元素的起始位置,就可随机地访问数据元素。但是这种表示方法不便于插入和删除元素,每插入或删除一个元素,都要移动插入或删除位置之后的数据元素在连续储存单元中的位置,而且除了重新分配内存,否则在程序运行过程中不能动态地增加储存单元的数量。

三、线性表的链式表示和实现

即用一个链表来储存数据元素。这种储存结构的特点是用一组任意的存储单元存储线性表的数据元素(可连续可不连续),它包括两个域:数据域和指针域,指针域储存下一个或上一个元素的内存地址,从而使这些元素连成一个线性表。线性表有单链表、双向链表和循环链表。

双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前继,克服了单链表的单向性缺点。

循环链表是表中最后一个结点的指针域指向头结点,整个链表形成一个环。从表中任一结点出发均可找到表中其他结点。

线性表的链式表示非常方便插入或删除元素,而且效率比较高,因为元素并不是储存在物理位置相邻的存储单元中,插入或删除元素只对表中逻辑上相邻的两个(在两端时为一个)元素有影响,对其他元素无影响。而且可在程序运行过程中“无限制”地添加元素直至内存不足。

 

一、定义

栈是限定仅能在表尾进行插入或删除操作的线性表。对栈来说,表尾称为栈顶、表头称为栈底,不含元素的空表称为空栈。

由于栈的上述特性,最先入栈的元素最后才能被删除,最晚入栈的元素最先被删除,所以栈又称为后进先出的线性表。

二、栈的顺序表示和实现

和线性表相似,栈也有两种储存方式,顺序栈和链式栈。顺序栈,即栈的顺序储存结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。

四、栈的链式表示和实现

栈的操作是线性表的特例,操作和线性表的操作基本相同。

五、栈的应用例子

进制转换、括号匹配检验、行编辑程序、迷宫求解、表达式求值、递归实现。

 

队列

一、定义

和栈相反,队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素,允许插入的一端叫队尾,允许删除的一端叫队头。应用例子:操作系统中的作业排队。

双端队列,是限定插入和删除操作在表的两端进行的线性表,尽管双端队列看起来比栈和队列灵活,但实际上在应用程序中远不及栈和队列有用。

二、队列的链式表示和实现

即有链表表示。一个链队列需要两个分别指示队头和队尾的指针(头指针和尾指针)才能唯一确定。

三、队列的顺序表示和实现——循环队列

即用连续的物理储存单元(数组)来表示。为了充分利用数组的储存单元,把队列设计成一个循环。由于此时,头指针=尾指针,无法判断队列是空还是满,所以有以下两种方法判断,a、另设一个标志位以区别队列是空还是满,b、少用一个元素空间,约定以“队头指针在队列尾指针的下一位置(指环状的下一位置)上”作为满的标志。

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值