Estructura de datos estructura de almacenamiento secuencial de tabla lineal e implementación del algoritmo principal

(1) La definición de tabla lineal.

Una secuencia finita de cero o más elementos de datos.
Inserte la descripción de la imagen aquí

Hay elementos sucesores directos en la tabla lineal de secuencia, uno y solo un sucesor directo y uno y solo un predecesor directo. La relación entre los elementos de datos es una relación de uno a uno

Operaciones de lista común:

Operación

InitList(*L)://初始化操作,简历一个空的线性表L
ListEmpty(L)://若线性表为空,返回true,否则返回Falser
GetElme(L,i,e)://将线性表L中的第i个位置元素值返回给e
LocateElme(L,e)://在线性表中L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中的序号表示成功;否则,返回0表示失败
ListInsert(*L,i,e)://在线性表L中的第i个位置插入新元素e
ListDelete(*L,i,*e)://删除线性表中L中第i个位置元素,并用e返回其值
ListLength(L)://返回线性表L的元素个数

(2) Lineal

La estructura de almacenamiento secuencial de la tabla y la implementación de los algoritmos principales, como los algoritmos de búsqueda, inserción y eliminación.

Definición: La estructura de almacenamiento secuencial de una tabla lineal se refiere al almacenamiento de los elementos de datos de la tabla lineal a la vez con una sección de unidades de almacenamiento con direcciones consecutivas.
Inserte la descripción de la imagen aquí

Método de almacenamiento secuencial: ocupa el espacio de la memoria en forma de ocupación y, a continuación, almacena los elementos de datos del mismo tipo de datos en él. Una matriz unidimensional realiza la estructura de almacenamiento secuencial.

#define MAXSIZE 20  /*储存空间初始分配量*/
typedef int ElemType;/*ElemType类型根据实际情况而定,假设为int*/
typedef struct {
    
    
ElemType data[MAXSIZE]/*据存储数据元素,最大值为MAXSIZE*/
int length;  /*线性表当前长度*/
}
sqlist;

* La posición inicial del espacio de almacenamiento: datos de la matriz, su ubicación de almacenamiento es la ubicación de almacenamiento del espacio de almacenamiento

* Capacidad máxima de almacenamiento de la mesa lineal: longitud de matriz MaxSize

* La longitud actual de la tabla lineal: longitud

Inserción y eliminación de estructura de almacenamiento secuencial:

Operación Get element: implementar la operación GetElem es devolver el valor del elemento de posición i en la tabla lineal

#define OK1
#define ERROR 0
#define TRUE 1
#define FALSE 
typedef int status;
/*status是函数的数据类型,其值是函数结构状态代码,如OK等*/
/*初始条件:顺序线性表L一存在,1<=i<=ListLength(L)*/
/*操作结构:用e返回L中第i个数据元素的值*/

Operación de inserción de estructura de almacenamiento de secuencia de tabla lineal:

La operación de inserción de la tabla lineal se refiere a insertar un nuevo elemento de datos n antes del i-ésimo elemento de datos de la tabla lineal

La idea del algoritmo de inserción:

La complejidad temporal del algoritmo de inserción:

Inserte la descripción de la imagen aquí

La derivación de la complejidad temporal muestra que la complejidad temporal promedio de la operación de inserción es O (n).

* Si la posición de inserción no es razonable, lanza una excepción

* Si la longitud de la tabla lineal es mayor o igual que la longitud de la matriz, se lanza una excepción o la capacidad aumenta dinámicamente

* Desde el último elemento, avance hasta la posición i-ésima y muévalos todos una posición hacia atrás respectivamente

* Rellene el elemento a insertar en la posición i out

* La longitud de la mesa más 1

/*初始条件:顺序线性表L以存在1<=i<=ListLength(L),*/
/*操作结构:在L中第i个位置之前插入新的数据元素e,L的长度加1*/
status ListInsert(Sqlist *L,int i,ELemType e){
    
    
int k;
if(L->length==MAXSIZE)/*顺序线性表已经满*/
return ERROR;
if(i<=L->length)/*若插入数据位置不在表尾*/
{
    
    
for(k=L->length-1;k>=i-1;k--/*将要插入位置后数据元素向后移动一位*/
L->data[k+1]=L->data[k];
}L->data{
    
    i-1]=e;/将新元素插入*/
L->length++;
return OK;
}

La eliminación de la estructura de almacenamiento secuencial de la tabla lineal: la eliminación de la tabla lineal se refiere a la eliminación del elemento de datos i-ésimo (0 <= i <= n-1) en la tabla, de modo que la tabla lineal con longitud n se convierte en longitud n-1 Tabla lineal de, es necesario mover el elemento i + 1 al n-1mo una posición hacia adelante

La idea del algoritmo de eliminación:

Complejidad temporal del algoritmo de eliminación:
Inserte la descripción de la imagen aquí

La derivación de la complejidad de tiempo muestra que la complejidad de tiempo promedio de la operación de eliminación también es O (n).

* Si la posición de eliminación no es razonable, lanza una excepción

* Eliminar y eliminar elementos

* Desde la posición del elemento eliminado hasta la última posición del elemento, no los mueva todos hacia adelante una posición

* Longitud de la mesa menos 1

Las características de la estructura de almacenamiento secuencial de la tabla lineal:

ventaja:

* Desordenado para expresar la relación lógica entre los elementos de la tabla y agregar espacio de almacenamiento adicional

* Puede acceder rápidamente a los elementos en cualquier posición de la tabla

Desventajas:

* Las operaciones de inserción y eliminación necesitan mover muchos elementos

* Cuando la longitud de la mesa lineal cambia mucho, es difícil determinar la capacidad del espacio de almacenamiento

* Provoca "fragmentación" del espacio de almacenamiento

Supongo que te gusta

Origin blog.csdn.net/weixin_45743004/article/details/103303450
Recomendado
Clasificación