void create_sq(sqlist &sq,int n)在数据结构中的含义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了void create_sq(sqlist &sq,int n)在数据结构中的含义相关的知识,希望对你有一定的参考价值。

参考技术A 该函数的作用是创建一个线性表,数据类型sqlist可以是结构类型,也可以是结构指针类型。如果是结构类型,则sqlist
&sq的意思是声明一个结构类型的引用类型形参变量sq,如果是指针类型,则sqlist
&sq表示声明一个结构指针类型的形参sq。&是C++中的引用操作符,意思是给实参取一个别名,对其操作就相当于对实参的操作。该函数中的参数n常代表要创建线性表的长度。

顺序表编程考点

顺序表编程考点

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
	}//结束插入
}//结束算法

  

以上是关于void create_sq(sqlist &sq,int n)在数据结构中的含义的主要内容,如果未能解决你的问题,请参考以下文章

6-1 顺序表创建和就地逆置 (10 分)

为啥在VC++6.0下用C语言调用引用参数如:void Creat(SqList &L)总是提示&出错?

线性表的应用

顺序表编程考点

线性表——基本操作

集合的并交差对称差运算