数据结构3--顺序表2

设计以下算法用于删除整数顺序表 L 中所有值在[x, y]范围内的元素。

#include"sqlist_int.cpp"

首先,包含顺序表的基本算法的头文件。在这个文件里面,ELemType是为int类型。

首先,需要写一个函数实现删除功能。

//传入的参数是顺序表以及区间的两个端点
void fun(SqList *L,ElemType x,ElemType y)
{
//k记录新顺序表的下标
    int k = 0;
//遍历顺序表
    for(i = 0;i < L->Length;i++)
    {
//如果i不在这个区间内,就把i移动到新表
        if(L->data[i] < x || L->data[i] > y)
        {
            L->data[k++] = L->data[i];
        }
//顺序表的长度就是k的值
    L->Length = k;
}

该算法的含义是首先向函数传递三个参数,顺序表,开始和结束位置。

需要一个新的变量记录更正过后的下标,即k;从头到尾遍历数组。不在指定区间即为留下来的数字

调用主函数

int main()
{
//定义一个顺序表
    SqList *L;
//定义一个一维数组
    ElemType a[] = {-1,-9,0,8,-7,11,5,-6};
//初始化顺序表
    CreateList(L,a,8);
//输出初始化之后的顺序表
    printf("L:");
    DispList(L);
//打印执行删除运算
    printf("执行删除运算\n");
//调用删除函数
    fun(L,0,10);
//打印删除后的顺序表
    printf("L:");
    DispList(L);
//销毁顺序表
    DestroyList(L);
}

以下为顺序表的基本算法:

#include 
#include 
#define MaxSize 50
typedef int ElemType; 
typedef struct 
{	ElemType data[MaxSize];		//存放顺序表元素
   	int length;					//存放顺序表的长度
} SqList;						//顺序表的类型
void CreateList(SqList *&L,ElemType a[],int n) //建立顺序表
{
	L=(SqList *)malloc(sizeof(SqList));
	for (int i=0;idata[i]=a[i];
	L->length=n;
}
void InitList(SqList *&L)
{
	L=(SqList *)malloc(sizeof(SqList));	//分配存放线性表的空间
	L->length=0;
}
void DestroyList(SqList *&L)
{
	free(L);
}
bool ListEmpty(SqList *L)
{
	return(L->length==0);
}
int ListLength(SqList *L)
{
	return(L->length);
}
void DispList(SqList *L)
{
	for (int i=0;ilength;i++)
		printf("%d ",L->data[i]);
	printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)
{
	if (i<1 || i>L->length)
		return false;
	e=L->data[i-1];
	return true;
}
int LocateElem(SqList *L, ElemType e)
{
	int i=0;
	while (ilength && L->data[i]!=e) i++;
	if (i>=L->length)
		return 0;
	else
		return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
	int j;
	if (i<1 || i>L->length+1)
		return false;
	i--;						//将顺序表位序转化为elem下标
	for (j=L->length;j>i;j--) 	//将data[i]及后面元素后移一个位置
		L->data[j]=L->data[j-1];
	L->data[i]=e;
	L->length++;				//顺序表长度增1
	return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
	int j;
	if (i<1 || i>L->length)
		return false;
	i--;						//将顺序表位序转化为elem下标
	e=L->data[i];
	for (j=i;jlength-1;j++)	//将data[i]之后的元素前移一个位置
		L->data[j]=L->data[j+1];
	L->length--;				//顺序表长度减1
	return true;
}

你可能感兴趣的:(数据结构,顺序表)