Thema der Datenstruktursequenztabelle (3)

Sequenztabellen-Themenbeschreibung und Code-Implementierung

Titelbeschreibung: Schreiben Sie für eine Sequenztabelle L der Länge n einen Algorithmus mit Zeitkomplexität O(n) und Raumkomplexität O(1), der alle Datenelemente löscht, deren Wert x in der linearen Tabelle ist.
Themenanalyse: Das Thema erfordert eine zeitliche Komplexität von O(n) und eine räumliche Komplexität von O(1), daher können keine anderen Arrays verwendet werden und Schleifen können nicht verschachtelt werden. Die konkreten Ideen sind wie folgt:

Idee 1: Verwenden Sie k, um die Anzahl der Elemente in der Sequenztabelle L aufzuzeichnen, die nicht gleich x sind (dh die Anzahl der Elemente, die gespeichert werden müssen), zählen Sie k, während Sie die Tabelle L scannen, und verschieben Sie die Elemente, die vorhanden sind sind ungleich x um k Positionen vorwärts und ändern schließlich die Länge von L.

Implementierungscode:

void del_x_1(sqList &L, ElemType x)
{
    
    //实现删除顺序表L中所有值为x的数据元素
	int k = 0;//记录不等于x的数的个数
	for (int i = 0; i < L.length; i++)
	{
    
    
		if (L.data[i] != x)
		{
    
    
			L.data[k] = L.data[i];
			k++;
		}
	}
	L.length = k;
}

Idee 2: Verwenden Sie k, um die Anzahl der Elemente gleich x in der Sequenztabelle L aufzuzeichnen, während Sie die Tabelle L scannen und k zählen, und verschieben Sie die Elemente, die nicht gleich x sind, um k Positionen nach vorne und ändern Sie schließlich die Länge von L.

Implementierungscode:

void del_x_2(sqList &L, ElemType x)
{
    
    
	int k = 0, i = 0;
	while (i < L.length){
    
    
		if (L.data[i] == x)
			k++;
		else
			L.data[i - k] = L.data[i];
		i++;
	}
	L.length = L.length-k;
}

おすすめ

転載: blog.csdn.net/ATTAIN__/article/details/107897914