考验数据结构-线性表
Posted sanchauncy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了考验数据结构-线性表相关的知识,希望对你有一定的参考价值。
线性表:
线性表表示是具有相同特性数据元素的有限序列。
①相同特性:把同一类事务归类,方便批量处理。
②有限:表中元素个数为n,n为有限大,n可以为0;
③序列:表中元素排成一列,体现了一对一的逻辑特性(每个元素有则仅有一个前驱和一个后继)。
顺序存储结构:
链式存储结构:
①单链表
带头节点:(Head→next == NULL 为空)
不带头节点:(Head= == NULL 为空)
②双链表
带头节点:
不带头节点:
循环链表:
不带头节点的单循环链:
考点
特性对比问题:
顺序表插入时需要将插入位置后所有元素往后移动一位
※在顺序表中插入和删除元素可能会导致移动大量元素的连带操作(插入或删除操作发生在表尾位置例外),而链表不会。
※在单链表中找到任意一个结点的位置不像顺序表那么简单,因为顺序表支持随机存储(任意存取),二单链表不支持。
※为了尽可能弥补上一条中单链表的不足,开发了双链表、循环链单双链表等存储结构,这些存储结构可以在仅知道链表中任意一个结点地址的情况下推至其余所有结点的地址,但仍然不支持随机存取。
※有时候还会给链表定义一个额外的指针,最常见的表尾指针,它指向链表中最后一个结点。可以借助它来提高某些常用操作的执行效率。
存储单元:
※线性表采用顺序存储结构,必须占用一片连续的存储单元,而采用链式存储结构则不需要这样;
※从表整体来看,一般顺序表存储空间利用率低于链表;而从单个存储单元来看,顺序表存储空间利用率要高于链表。
操作问题:
1 //单链表插入 2 s→next = p→next; 3 p→next = s; 4 //单链表删除 5 p→next = s→next; 6 free(s);
※给链表设置头结点,可以使得在第一个数据结点之前插入一个新结点和删除第一个数据结点的操作同表中部结点的这些操作统一起来,方便写代码;
※带头结点的链表,其指针值不随操作而改变,可以减少错误。
1 //双链表结点插入 2 s→next = p→next; 3 s→prior = p; 4 p→next = s; 5 s→next→prior = s; 6 //双链表结点删除 7 s→prior→next = s→next; 8 s→next→prior = s→prior; 9 free(s);
元素移动次数计算:
顺序表插入元素:
※在任一位置插入元素的概率为:p=1/(n+1);
※在i位置(i的取值:0~n)之前插入元素,需要移动n-i个元素;
※插入元素平均要移动的元素个数为:n/2.
顺序表删除元素:
※在任一位置插入元素的概率为:p=1/n;
※在i位置(i的取值:0~n)之前插入元素,需要移动n-i-1个元素;
※插入元素平均要移动的元素个数为:(n-1)/2.
以上是关于考验数据结构-线性表的主要内容,如果未能解决你的问题,请参考以下文章