顺序表的相关知识,删除插入等

关于顺序表的一些代码

6-1 顺序表的删除操作

int ListDelete(SqList& L, int i){
	if (L.length==0||i<1 || i>L.length) return 0;
	if (i < L.length)
		for (int j= i;j < L.length;j++)
			L.elem[j - 1] = L.elem[j];
	L.length--;
	return 1;
}

6-2 有序表的插入【有题解视频】

void ListInsertSort(SqList *L, DataType x){
    if(L->length<0) return;
    if(L->length++==0) L->items[0]=x;
    int k;
    for(int i = 0;i<L->length;i++)
        if(x<L->items[i]){
           k=i; break;
        } 
    for(int j = L->length;j>k;j--)
        L->items[j]=L->items[j-1];
    L->items[k]=x;
}

6-3 拼接两个顺序表【有题解视频】

void ListJoin(List A,List B){
    for (int i=0;i<B.num;i++)
        InsertList(&A,LengthList(A),B.dat[i]);
    DispList(A);
}

6-4 数据结构-顺序表-学生的成绩信息(TODO:SeqList 排序, gCC )

int *p;
int cmpfunc ( const void *a ,const void *b) { 
    return (*(Student *)a).score[*p] > (*(Student *)b).score[*p]  ? 1 : -1; 
} 
void SortSeqListBySubject( SeqList * L ,int k){
	p = &k;
	qsort(L->stu, L->len, sizeof(L->stu[0]), cmpfunc);
}

6-5 数据结构-顺序表-学生的成绩信息(TODO:SeqList 逆转, gCC )

void ReverseSeqList( SeqList * L){
    SeqList tmp;
    int left=0;int right=L->len-1;
    while(left<right){
        tmp.stu[0] = L->stu[left];
        L->stu[left++] = L->stu[right];
        L->stu[right--] = tmp.stu[0];
    }
}

6-6 顺序表基本运算算法的实现

/**
 * 初始化顺序表L。
 */
void InitList(SqList * &L){
	L=(SqList *)malloc(sizeof(SqList));	
	L->length=0;
}
/**
 * 释放顺序表L。
 */
void DestroyList(SqList * &L){
	free(L);
}
/**
 * 判断顺序表L是否为空表。
 * 空表返回true,非空表返回false。
 */
bool ListEmpty(SqList * L){
	return(L->length==0);
}
/**
 * 返回顺序表L的元素个数。
 */
int ListLength(SqList * L){
    return(L->length);
}
/**
 * 输出顺序表L。
 */
void DispList(SqList * L){
    for (int i=0;i<L->length;i++)
		printf("%c ",L->data[i]);
	printf("\n");
}

/**
 * 获取顺序表L中第i(1≤i≤L->length)个元素,将其值存入e,然后返回true;
 * 如果不能获取到第i个元素,返回false。
 */
bool GetElem(SqList * L, int i, ElemType &e){
    if (i<1 || i>L->length)
		return false;
	e=L->data[i-1];
	return true;
}

/**
 * 在顺序表L中查找元素e。
 * 如果存在e,则返回e的逻辑序号,否则返回0。
 */
int LocateElem(SqList * L,  ElemType e){
    int i=0;
	while (i<L->length && L->data[i]!=e)
		i++;
    return i>=L->length? 0 : i+1;
}

/**
 * 在顺序表L中第ii(1≤i≤L->length)个位置上插入元素e。
 * 插入成功,返回true。插入不成功,返回false。
 */
bool ListInsert(SqList * &L, int i,  ElemType e){
    	int j;
	if (i<1 || i>L->length+1)
		return false;
	i--;
	for (j=L->length;j>i;j--)
		L->data[j]=L->data[j-1];
	L->data[i]=e;
	L->length++;
	return true;
}

/**
 * 从顺序表L中删除第ii(1≤i≤L->length)个元素。
 * 删除成功,返回true。删除不成功,返回false。
 */
bool ListDelete(SqList * &L, int i, ElemType &e){
    	int j;
	if (i<1 || i>L->length)
		return false;
	i--;
	e=L->data[i];
	for (j=i;j<L->length-1;j++)
		L->data[j]=L->data[j+1];
	L->length--;
	return true;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值