順序表的一些操作

#define MaxSize 50
typedef struct{
	int data[MaxSize];
	int length;
}SqList;

//二分查找(有序表)非遞歸 
int BinarySearch(SqList L,int x){
	int low=0,high=L.length-1,mid;
	while(low<=high){
		mid=(low+high)/2;
		if(L.data[mid]==x){
			return mid;
		}else if(L.data[mid]>x){
			high=mid-1;
		}else{
			low=mid+1;
		}
	}
	return -1;
} 
//二分查找遞歸
int BinarySearchRec(SqList L,int x,int low,int high){
	if(low>high)return -1;
	int mid=(low+high)/2;
	if(x>L.data[mid]){
		return BinarySearchRec(L,x,mid+1,high);
	}else if(x<L.data[mid]){
		return BinarySearchRec(L,x,low,mid-1);
	}else{
		return mid;
	}
} 

//插入、刪除
bool ListInsert(SqList &L,int k,int x){
	if(k<1||k>L.length+1||L.length>=MaxSize)return false;
	//插入位置可以是1->n+1
	for(int i=L.length;i>=k;i--){
		L.data[i]=L.data[i-1];
	}
	L.data[k-1]=x;
	L.length++;
	return true;
} 

bool ListDelete(SqList &L,int k,int &x){
	if(k<1||k>L.length)return false;
	//刪除位置是1->n
	x=L.data[k-1];
	for(int i=k;i<L.length;i++){
		L.data[i-1]=L.data[i];
	}
	L.length--;
	return true; 
}

//就地倒置
void Reverse(SqList &L){
	for(int i=0;i<L.length/2;i++){
		int temp=L.data[i];
		L.data[i]=L.data[L.length-1-i];
		L.data[L.length-1-i]=temp;
	}
}

//刪除所有值爲x的元素
void del_all_x(SqList &L){
	int k=0;
	for(int i=0;i<L.length;i++){
		if(L.data[i]!=x){
			L.data[k++]=L.data[i];
		}
	} 
	L.length=k;
} 

//刪除值在s與t之間的所有元素
void del_s2t(SqList &L){
	int k=0;
	for(int i=0;i<L.length;i++){
		if(L.data[i]>=s&&L.data[i]<=t){
			k++;
		}else{
			L.data[i-k]=L.data[i];
		}
	}
	L.length-=k;
}

//刪除有序表中重複元素
void del_same(SqList &L){
	int k=0;
	for(int i=1;i<L.length;i++){
		if(L.data[i]!=L.data[k]){
			L.data[++k]=L.data[i];
		}
	}
	L.length=k+1;
} 

//合併兩個有序表
void Merge(SqList A,SqList B,SqList &C){
	int i=0,j=0,k=0;
	while(i<A.length&&j<B.length){
		if(A.data[i]<=B.data[j]){
			C.data[k++]=A.data[i++];
		}else{
			C.data[k++]=B.data[j++];
		}
	}
	while(i<A.length)C.data[k++]=A.data[i++];
	while(j<B.length)C.data[k++]=B.data[j++];
	C.length=k;
} 

 

發佈了55 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章