码迷,mamicode.com
首页 > 其他好文 > 详细

顺序表编程考点

时间:2017-08-31 21:39:43      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:相等   数据   enter   struct   delete   合并   sql   编程   开始   

顺序表编程考点

1、顺序表删除算法

//顺序表删除算法
typedef struct{
	Elemtype *elem;
	int length;
	int listsize;
}Sqlist;
int ListDelete_sq(Sqlist *L,int i)			//删除顺序表L中的第i个元素
{
	int k;
	if(i<1 || i>L->length)					//删除位置出错
	return 0;
	for(k = i;k< L->length; k++)			//从第i+1个位置开始,每个元素前移一个位置
	L->slist[k] = L->slist[k+1];
	--L->length;							//表的长度减1
	return 1;								//返回成功
}

  

2、将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表

//将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表
typedef struct{
	Elemtype *elem;
	int length;
	int listsize;
}Sqlist;
void merge(Sqlist A,Sqlist B,Sqlist &C)
{
	int i=0,j=0,k=0;						//A、B、C三个数组指针i、j、k
	while(i<A.length && j<B.length)			//退出循环的条件
	{
		if(A.elem[i]<=B.elem[j])			//如果A.elem[i]<=B.elem[j]
		{
			C.elem[k]=A.elem[i];			//将A.elem[i]接在数组C的k位置
			i++;							//数组A和数组C的数组指针加1
			k++;
		}
		else								//如果A.elem[i]>B.elem[j]
		{
			C.elem[k] = B.elem[j];			//将A.elem[j]接在数组C的k位置
			j++;							//数组B和数组C的数组指针加1
			k++;
		}
	}
	while(i<A.length)						//数组A还有元素但是B中所有元素均在C中
	{
		C.elem[k] = A.elem[i];				//依次将数组A中剩余元素接在C表表尾
		i++;
		k++;
	}
	while(j<B.length)						//数组B还有元素但是A中所有元素均在C中
	{
		C.elem[k] = B.elem[j];				//依次将数组A中剩余元素接在C表表尾
		j++;
		k++;
	}
	C.length = k;							//将A、B数组全部接完,表C长为原A、C表长之和
}

  

3、顺序表元素递增有序,将x插入到顺序表以后,保持该表的有序性

//顺序表元素递增有序,将x插入到顺序表以后,保持该表的有序性
typedef struct{
	Elemtype *elem;
	int length;
	int listsize;
}Sqlist;
void InserSqlist(Sqlist &va, int x)
{
	int i;
	if(va.length >Maxsize)
	return;
	for(i = va.length-1; va.elem[i]>x && i>=0;i--)
	va.elem[i+1]=va.elem[i];
	va.elem[i+1]=x;
	va.length++;
}

  

4、试写一个算法,实现顺序表的就地逆置

//试写一个算法,实现顺序表的就地逆置
void reverse(int a[],int size)
{
int i, j, tmp;
for(i=0,j=size-1;i<j;i++,j--)
{
	tmp=a[i];
	a[i]=a[j];
	a[j]=tmp;
}
}

  

5、将顺序表中正、负整数分开

//将顺序表中正、负整数分开
void part(int array[],int n)
{
	int i,j;
	i=1;
	j=n;
	while(i<j)
	{
		while(i<j && array[i]<0)			//i指针从前往后扫描数组,遇到比0大的值停下
		i++;
		while(i<j && array[j]>=0)			//j指针从前往后扫描数组,遇到比0小的值停下
		j--;
		if(i<j)								//如果i<j,交换两个指针分别指向的元素
		{
			array[0]=array[i];
			array[i]=array[j];
			array[j]=array[0];
		}
	}
}

  

6、将数组中的数按照从大到小的顺序排序

//将数组中的数按照从大到小的顺序排序
void ReArrange( int A[], int B[], int n)
{
	for(i=0; i<n; i++)
		B[n-A[i]] = A[i];
}

  

7、折半查找查找数值为x的值

//折半查找查找数值为x的值
void SearchExchangeInsert(Elemtype a[],elemtype x)
{
	low = 0;					//low和high指向线性表下界和上界的下标
	high = n-1;
	while(low <= high)
	{
		mid = (low +high)/2;	//找中间位置
		if(a[mid] == x)			//找到x,退出while循环
		break;
		else if(a[mid] < x)
			low = mid +1;		//到中点mid的右半去查
			else high = mid - 1;//到中点mid的左半去查
	}
	if(a[mid]==x && mid != 0)	//若最后一个元素与x相等,则不存在与其后继交换的操作
	{
		t=a[mid];
		a[mid] = a[mid+1];
		a[mid+1] = t;
	}							//数组x与其后继元素位置交换
	if(low > high)				//查找失败,插入数据元素x
	{
		for(i = n-1; i>high;i--)
		a[i+1] = a[i];			//后移元素
		a[i+1] = x;				//插入x
	}//结束插入
}//结束算法

  

顺序表编程考点

标签:相等   数据   enter   struct   delete   合并   sql   编程   开始   

原文地址:http://www.cnblogs.com/wxt19941024/p/7460607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!