数据结构第二章 ——线性表之顺序表

数据结构第二章 ——线性表之顺序表

基本

//INIT 初始化 
Status SqInit(Sqlist &L){
   
	L.elem=(ElemType *)malloc (List_Init_Size*sizeof(ElemType));
	if (!L.elem)
		exit(OVERFLOW);
	else
		printf("创建成功!\n");
	L.length=0;
	L.listsize=List_Init_Size;
}
//SqEmpty 判空 
Status SqEmpty(Sqlist L){
   
	if (L.length==0)
		printf("空表\n");
	else
	printf("不是空表\n");
	return OK;	
}
//SqClear 重置线性表是将长度归零 
Status SqClear(Sqlist &L){
   
	if(!L.elem)		//判断线性表是否存在 
		exit(OVERFLOW);
	L.length=0;
	printf("重置成功!\n");
	return OK;
}
//SqLength 返回线性表长度 
Status SqLength(Sqlist L){
   
	if(!L.elem)		//判断线性表是否存在 
		exit(OVERFLOW);
	return L.length;
} 
//SqDisplay 打印 
void SqDisplay(Sqlist L){
   
	int i;
    for (i=0;i<L.length;i++) {
   
        printf("%5d",L.elem[i]);
    }
    printf("\n");
}
//SqDestroy	销毁 
Status SqDestroy(Sqlist &L){
   
	if (L.elem) {
   			// 检查是否为空
		free(L.elem);	// 删除分配的内存
		L.elem = NULL;		// 基地址设为空
	}		
	L.length = 0;			// 表长设为0
	L.listsize = 0;				// 表空间设为0
}
//SqGetElem 取顺序表中某个元素
Status SqGetElem(Sqlist L,int pos,ElemType e){
   
	e = L.elem[pos-1];
	return e;
}
//SqLocateElem 返回第一次出现elem的位置
Status SqLocateElem(Sqlist L,ElemType e){
   
	int i;
	int number =0;
	int pos;
	for (i=0;i<L.length;i++){
   
		if (L.elem[i]==e){
   
			pos = i+1;
			number++;
		}
	}
	if(number == 0)
		pos =number;
	return pos;
}

插入

//SqInsert
//顺序表的插入需将插入位置(含)后面的元素都往后移
//	1.往后移,因为是顺序表,所以从后往前移动,故 i =  L.length-1
//	2.一直到插入位置(含)都需要移动,故 i =  i>=pos-1 (我们说的插入位置即 pos 是正序(从 1 开始),所以在数组中的位置为 pos-1 ,又因为含所以要 = 
// 	3.所谓后移,即右移 即  L.elem[i+1]=L.elem[i] (将左边的值赋给右边) 
Status SqInsert(Sqlist &L,int pos,ElemType e){
   
	int i;
//判断插入的合法性 
	if(pos<1 || pos>L.length+1)		//i值太小或太大,均不合法,注意可以插入到最后一个元素的后面那个空白处
		return ERROR;
	//再判断L是否空间已满,如果已满,需要拉大10个空间
	if(L.length>=L.listsize)
	{
   
		L.elem=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
		if(L.elem==NULL)
		{
   
			printf("对不起,申请空间失败,程序将退出\n");
			exit(OVERFLOW);
		}
		L.listsize+=LISTINCREMENT;		//总空间大小加10
	}
//核心 
	for 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值