链式存储结构的主要特点为:
结点中除包含保存数据元素的自身信息的信息域外,还有表示数据元素之间的链接信息的指针域,因此比顺序存储结构的存储密度低,存储空间的利用率也较低。
逻辑上相邻的数据元素在物理上不一定相邻,可用于存储线性表、树、图等多种逻辑结构。
插入、删除 *** 作比较灵活,不必移动数据元素,只要改变结点中的指针域的值即可。
链式结构是一种数据结构,学名链式存储结构,又叫链接存储结构。使用对象引用变量来创建对象间的链接。
它不要求逻辑上相邻的元素在物理位置上也相邻。因此它没有顺序存储结构所具有的弱点,同时也失去了顺序表可随机存取的优点。
其特点主要表现为:
1、比顺序存储结构的存储密度小;
2、插入、删除灵活,结点可以被插入到链表的任何位置,首、中、末都可以,而且不必要移动结点中的指针;
3、链表的大小可以按需伸缩,是一种动态存储结构,其实现的集合在增、删方面性能更高;
4、查找结点时的效率就相对数组较低,只能从第一个结点开始顺着链表逐个查找(这是他的缺点)。
高清播放机,图片大全,点击查看详情!
精选推荐
广告
数据结构篇——链式存储
3483阅读·0评论·0点赞
2019年2月18日
数据库二级复习笔记(1)选择题
1593阅读·0评论·1点赞
2022年3月15日
数据结构—栈---链式存储结构
115阅读·0评论·1点赞
2022年9月20日
数据结构之顺序存储与链式存储
6666阅读·0评论·10点赞
2020年11月25日
数据结构-第二章(5)-链式存储结构
1932阅读·4评论·3点赞
2021年11月26日
(数据结构)静态链表——概念、插入与删除(程序)、优缺点
320阅读·0评论·0点赞
2021年8月13日
高清播放机,图片大全,点击查看详情!
精选推荐
广告
链式存储结构的特点
1.3W阅读·1评论·2点赞
2017年10月31日
数据结构的链式存储结构
3673阅读·1评论·2点赞
2014年3月10日
数据结构——>链式存储结构
4
一、顺序结构
优点:
1、支持顺序存取和随机存取。
2、顺序存取速度快。
3、所需的磁盘寻道次数和寻道时间最少。
缺点:
1、需要为每个文件预留若干物理块以满足文件增长的部分需要。
2、不利于文件插入和删除。
二、链式结构
优点:
1、提高了磁盘空间利用率,不需要为每个文件预留物理块。
2、有利于文件插入和删除。
3、有利于文件动态扩充。
缺点:
1、存取速度慢,不适于随机存取。
2、当物理块间的连接指针出错时,数据丢失。
3、更多的寻道次数和寻道时间。
4、链接指针占用一定的空间,降低了空间利用率。
三、索引结构
优点:
1、不需要为每个文件预留物理块。
2、既能顺序存取,又能随机存取。
3、满足了文件动态增长、插入删除的要求。
缺点:
1、较多的寻道次数和寻道时间。
2、索引表本身带来了系统开销。如:内外存空间,存取时间等。
拓展资料:
文件存取方法:
顺序存取:顺序存取是按照文件的逻辑地址顺序存取。
固定长记录的顺序存取是十分简单的。读 *** 作总是读出上一次读出的文件的下一个记录,同时,自动让文件记录读指针推进,以指向下一次要读出的记录位置。如果文件是可读可写的。再设置一个文件记录指针,它总指向下一次要写入记录的存放位置,执行写 *** 作时,将一个记录写到文件 末端。允许对这种文件进行前跳或后退N(整数)个记录的 *** 作。顺序存取主要用于磁带文件,但也适用于磁盘上的顺序文件。
可变长记录的顺序文件,每个记录的长度信息存放于记录前面一个单元中,它的存取 *** 作分两步进行。读出时,根据读指针值先读出存放记录长度的单元 。然后,得到当前记录长后再把当前记录一起写到指针指向的记录位置,同时,调整写指针值 。
由于顺序文件是顺序存取的,可采用成组和分解 *** 作来加速文件的输入输出。
直接存取(随机存取法):
很多应用场合要求以任意次序直接读写某个记录。例如,航空订票系统,把特定航班的所有信息用航班号作标识,存放在某物理块中,用户预订某航班时,需要直接将该航班的信息取出。直接存取方法便适合于这类应用,它通常用于磁盘文件。
为了实现直接存取,一个文件可以看作由顺序编号的物理块组成的,这些块常常划成等长,作为定位和存取的一个最小单位,如一块为1024字节、4096字节,视系统和应用而定。于是用户可以请求读块22、然后,写块48,再读块9等等。直接存取文件对读或写块的次序没有限制。用户提供给 *** 作系统的是相对块号,它是相对于文件开始位置的一个位移量,而绝对块号则由系统换算得到。
索引存取:
第三种类型的存取是基于索引文件的索引存取方法。由于文件中的记录不按它在文件中的位置,而按它的记录键来编址,所以,用户提供给 *** 作系统记录键后就可查找到所需记录。通常记录按记录键的某种顺序存放,例如,按代表健的字母先后次序来排序。对于这种文件,除可采用按键存取外,也可以采用顺序存取或直接存取的方法。信息块的地址都可以通过查找记录键而换算出。实际的系统中,大都采用多级索引,以加速记录查找过程。
参考资料:百度百科:文件存取法
链式队列链式存储结构的队列称作链式队列。
链式队列的队头指针指在队列的当前队头结点位置,队尾指针指在队列的当前队尾结点位置。不带头结点的链式队列时可直接删除队头指针所指的结点。
链式队列中结点的结构体可定义如下:
typedef struct qnode
{
DataType datal
Struct qnode *next
}LQNode
为了方便参数调用,通常把链式队列的队头指针front和队尾指针rear也定义为如下的结构体类型LQueue:
typedef struct
{
LQNode *front
LQNode *rear
}LQueue
链式队列 *** 作的实现
(1) 初始化QueueInitiate(LQueue *Q)
void QueueInitiate(LQueue *Q)
{
Q->rear=NULL
Q->front=NULL
}
(2)非空否QueueNotEmpty(LQueue Q)
int QueueNotEmpty(LQueue Q)
/*判断链式队列Q非空否,非空返回1,否则返回0*/
{
if(Q.front==NULL)return 0
else return 1
}
(3)入队列QueueAppend(LQueue *Q,DataType x)
int QueueAppend(LQueue *Q,DataType x)
/*把数据元素x插入链式队列Q队列的队尾,入队列成功返回1,否则返回0*/
{
LQNode *p
if((p=(LQNode*)malloc(sizeof(LQNode)))==NULL)
{
printf(“内存不足无法插入!\n)
return 0
}
p->data=x
p->next=NULL
if(Q->rear!=NULL)Q->rear->next=p
Q->rear=p
if(Q->front==NULL)Q->front=p
return 1
}
(4)出队列QueueDelete(LQueue *Q,DataType *d)
int QueueDelete(LQueue *Q,DataType *d)
/*删除链式队列Q的队头数据元素值到d,出队列成功返回1,否则返回0*/
{
LQNode *p
if(Q->front==NULL)
{
printf(“队列已空无数据元素出队列!\n”)
return 0
}
else
{
*d=Q->front->data
p=Q->front
Q->front=Q->front->next
if(Q->front==NULL)Q->rear=NULL
free(p)
return 1
}
}
(5)取队头数据元素QueueGet(LQueue *Q,DataType *d)
int QueueGet(LQueue *Q,DataType *d)
/*取链式队列Q的当前队头数据元素值到d,成功返回1,否则返回0*/
{
if(Q.front==NULL)
{
printf(“队列已空无数据元素出队列!\n)
return 0
}
else
{
*d=Q.front->data
return 1
}
}
(6)撤销动态申请空间Destory(LQueue *head)
int Destory(LQueue *head)
{
LQNode *p,*p1
p=Q.front
while(p!=NULL)
{
p1=p
p=p->next
free(p1)
}
}
帮你转的,我觉得他描述的很清楚。希望对你有帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)