如果再要在线性表的第9个元素之前插入一个新元素14,则采用类似的方法:略。
插入后,线性表的长度变成了10。如下图所示。
此时,不能再插入了。
V(1:10) V(1:10)
考点9 线性表的删除运算
删除元素时,线性表的逻辑结构发生什么变化?
在一般情况下,要删除第i(1≤i≤n)个元素时,则要从第i+1个元素开始,直到第n个元素之间共n-i个元素依次向前移动一个位置。删除结束后,线性表的长度就减少了1。
例:图2为一个长度为8的一线性表顺序存储在长度为10的存储空间中。删除线性表中的第1个元素:
删除线性表中的第6个元素:
显然,在线性表采用顺序存储结构时,
如果删除运算在线性表的末尾,即删除第n个元素,则不需要移动表中元素;
如果要删除线性表的第1个元素,则需要移动表中所有的元素。
在平均情况下,要在线性表中删除一个元素,需要移动表中一半的元素。因此,在线性表顺序存储的情况下,要删除一个元素,其效率是很低的,特别是在线性表比较大的情况下更为突出,由于数据元素的移动而消耗较多的处理时间。
删除操作的时间复杂度为:n
O(n)
由线性表在顺序存储结构下的插入与删除运算可以看出,线性表的顺序存储结构对于小线性表或者其中元素不常变动的线性表来说是合适的,因为顺序存储的结构比较简单。但这种顺序存储方式对于元素经常需要变动的大线性表就不太合适了。因为插入与删除的效率比较低。其时间复杂度均为n。
四、栈和队列
*考点10 栈及其基本运算 重点 1.栈的定义
栈(stack)实际上也是线性表,只不过是一种特殊的线性表。其插入和删除运行都只能在表的一端进行。 栈是限定在一端进行插入和删除的线性表。
课件演示:栈的基本概念.ppt
在栈中,允许插入与删除的一端称为栈顶,而不允许插入与操作的另一端称为栈底,当表中没有元素时称为空栈。
栈顶元素总是最后被插入的元素,也是最早被删除的元素;栈底元素是最早被插入的元素,也是最晚被删除的元素。
即栈的修改原则是先进后出(first in last out,FILO)或后进先出(last in first out,LIFO)。
通常,用指针top来指示栈顶的位置,用指针bottom来指示栈底的位置。
2.栈的顺序存储及运算
与一般的线性表一样,在程序设计语言中,用一维数组S(1:m)作为栈的顺序存储空间,其中m为栈的最大容量。通常,栈底指针指向栈空间的低地址一端(即数组的起始地址这一端)。如下图a所示为容量为10的栈顺序存储空间,栈中已有6个元素;图b与图c分别为入栈与退栈后的状态。
栈的运算有3种:入栈、退栈与读栈顶元素。 ①入栈运算
入栈运算是指在栈顶位置插入一个新元素。此运算有两个基本操作:
首先将栈顶指针进入(即top加1),然后将新元素插入到栈顶指针指向的位置。
当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,不可能再进行入栈操作。这种情况称为栈“上溢”错误。
②退栈运算
退栈是指取出栈顶元素并赋给一个指定的变量。此运算有两个基本操作:
首先将栈顶元素(栈顶指针指向的元素)赋予一个指定的变量,然后将栈顶指针退1(即top减1)
当栈顶指针为0时,说明栈空,不可能再进行退栈操作。这种情况称为栈“下溢”错误。