数据结构——动态顺序表

线性表:

动态顺序表的实现:

#define MAXSIZE 100
typedef int SLDateType;

typedef struct SeqList {
	SLDateType* array; //动态数组
	int size;	//有效元素的个数
	int capacity;	//容量
}SeqList;

功能实现:

初始化、破坏:

//功能实现
//初始化
int InsertSeqList(SeqList* Seq) {
	Seq->capacity = MAXSIZE;  //容量
	Seq->array = (SLDateType*)malloc(sizeof(SeqList)*Seq->capacity);	
        //开辟空间
	Seq->size = 0;	//有效数据个数
	return true;
}

//释放
int DeleteSeqList(SeqList* Seq) {
	free(Seq->array);  //释放空间
	Seq->capacity = 0;
	Seq->size = 0;
}

插入数据:


//插入
int SeqListInit(SeqList* Seq, int i,int date) {  //顺序表Seq 中第i位置,插入数据date   //i是空间下表
	//边界判断
	//1.表是不是满了
	if (Seq->size==Seq->capacity) {  //有效元素个数 = 容量
		printf("表满了,插入失败!");
		return false;
	}
	//2.插入位置是否合理
	if (i<=0 || i>Seq->capacity) {
		printf("插入位置不合理!");
		return false;
	}
	//插入元素,移动i之后的后续数据
	int j;
	for (j = Seq->size; j >= i - 1;j--) {
		Seq->array[j + 1] = Seq->array[j];  //移动
	}
	Seq->array[i - 1] = date;		//插入数据
	Seq->capacity++;		//容量扩大
	return 1;
}

删除数据——删除第i个元素:

//删除
//一样删除第i个元素
int Delete1(SeqList* Seq,int i) {
	//边界判断
	//这时候表是不是空或者满的无所谓了
	//只用考虑删除位置是否合理化
	if (i <=0 || i>Seq->size) {
		printf("删除位置不合理");
		return false;
	}

	//把i后面的数据向前移动一个,直接覆盖掉第i个元素  //同样i 是空间位置,数组小标就要-1
	int j = 0;
	for (j = i; j < Seq->size;j++) {
		Seq->array[j-1] = Seq->array[j];
	}
	//插入之后相关信息的改变
	Seq->size--; //有效元素个数-1
	return true;
}

删除数据——删除第一个数据是date的值:


//删除第一个数据是date的值
int Delete2(SeqList* Seq, int date) {
	//1.找到第一个数据date的位置
	int j = 0;
	for (j = 0; j < Seq->size;j++) {
		if (Seq ->array[j]==date) {
			Seq->array[j] = Seq->array[j + 1];  
			//找到之后,删除该位置元素,和前面一样,覆盖
			//信息变化
			Seq->size--;
			break;	//只删除一个跳出循环
		}
	}
}

删除数据——删除全部数据是date的值:


//删除全部数据是date的值
int Delete2(SeqList* Seq, int date) {
	while (1) {
		//1.找到第一个数据date的位置
		int j = 0;
		for (j = 0; j < Seq->size; j++) {
			if (Seq->array[j] == date) {
				Seq->array[j] = Seq->array[j + 1];
				//找到之后,删除该位置元素,和前面一样,覆盖
				//信息变化
				Seq->size--;
				continue;	//注意是continue,只是跳出本次的循环
			}
		}
	}
	
}

查询数据——按值查询:


//查询
//按值查询
int FindSeqList(SeqList* Seq, int date) {
	//顺序表Seq 中找到数据是date的元素,返回它的位置(空间位置)
	//边界判断
	//表如果是空的就找不到了
	if (Seq->size ==0) {
		printf("表为空,没有所要找的数据!\n");
		return 0;
	}
	//找数据等于date的位置
	int j = 0;
	for (j = 0; j <= Seq->size - 1;j++) {   //注意size -1 ;因为size 是最后一个元素的位置
		if (Seq->array[j] =date ) {
			printf("找到了%d的位置", date);
			return j + 1;  //返回位置
		}
	}
	return -1; //表示没找到
}

查询数据——位值查询:

//按位置查询
int FindAddressSeqList(SeqList* Seq,int i) {   //i 是空间位置
	//找到位置,返回数据的值
	//注意顺序表顺序存放的,直接返回就好了
	return Seq->array[i - 1];
}

其他:

// 获取顺序表有效元素个数 
int SeqListSize(SeqList* Seq)   //i空间下标
{
	return Seq->size;
}
// 获取顺序表的容量 
int SeqListCapacity(SeqList* Seq)   //i空间下标
{
	return Seq->capacity;
}

// 检测顺序表是否为空 
int SeqListEmpty(SeqList* Seq)   //i空间下标
{
	if (Seq->size == 0)
		return 0;
}

// 获取顺序表中第一个元素 
int SeqListFront(SeqList* Seq)  //i空间下标
{
	return Seq->array[0];
}

// 获取顺序表中最后一个元素 
int SeqListBack(SeqList* Seq)   //i空间下标
{
	return Seq->array[Seq->size - 1];
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值