順序表表--該算法刪除線性表中所有值爲x的數據元素(時間複雜度爲O(n)、空間複雜度爲O(1))

線性表

/*
	已知長度爲n的線性表A採用順序存儲結構。
	設計一個時間複雜度爲O(n)、空間複雜度爲O(1)的算法,
	該算法刪除線性表中所有值爲x的數據元素。
*/

/*
	方法一:
	找到第一個不相等的元素就放到鏈表第一個,第二個就放到第二個
*/ 
#include<stdio.h>
#include<stdlib.h>
typedef struct 
{
	int data[100];
	int length;
}SqList;
void CreateList(SqList *&L,int a[],int n);
void delect(SqList *&L,int x);
int main()
{
	int i;
	SqList *L;
	int a[] = {1,2,1,2,3,2};
	CreateList(L,a,6);
	delect(*&L,2);
	for( i = 0; i < L->length; i++)
		printf("%d\n",L->data[i]);
	return 0;
	
	
}

void CreateList(SqList *&L,int a[],int n)  //順序表指針L 
{
	int i;
	L = (SqList *)malloc(sizeof(SqList));
	for( i=0; i<n; i++)
	{
		L->data[i]= a[i];
	 } 
	 L->length = n; 
}
void delect(SqList *&L,int x)
{
	int k = 0;
	int i = 0;
	for( i = 0; i < L->length; i++)
	{
		if(L->data[i] != x)
		{
			L->data[k] = L->data[i];
			k++;
		}	
	}
	L->length = k;
}
/*
	方法二:將不爲x的元素前移k個位置,最後修改A的長度
	
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
	int data[6];
	int length;
}SqList;
void CreateList(SqList *&L,int a[],int n);
void delect(SqList *&L,int x);
int main()
{
	int i;
	SqList *L;
	int a[] = {1,2,1,2,3,2};
	CreateList(L,a,6);
	delect(L,2);
	for( i = 0; i < L->length; i++)
		printf("%d\n",L->data[i]);
	return 0;
}

void CreateList(SqList *&L,int a[],int n)  //順序表指針L 
{
	int i;
	L = (SqList *)malloc(sizeof(SqList));
	for( i=0; i<n; i++)
	{
		L->data[i]= a[i];
	 } 
	 L->length = n; 
}

void delect(SqList *&L,int x)
{
	int k = 0;
	int i;
	for( i = 0; i < L->length; i++)
	{
		if( x == L->data[i])
		{
			k++;
		}
		else
		{
			L->data[i-k] = L->data[i];
		}
	}
	L->length = L->length - k;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章