顺序表实现线性结构

顺序表的优点
能够随机储存和访问,能通过数组名(首数据地址)+元素序号(偏移量)直接访问
a[5]能够访问第五个数据,链表需要遍历才可以
缺点
大小确定,扩容不方便
数据改动时需要的操作太多如增删
在这个操作后,需要把后面数据全部改动

typedef struct ArrayList {
	int* date;//指针模拟开数组,
	int size;//实际数据大小
}Array;
Array initArray(){
	Array a;
	a.date = (int*)malloc(sizeof(int) * max);
	if (a.date == NULL) {
		printf("内存分配失败");
		return a;
	}
	a.size = 0;
	return a;
}//初始化


1.确定数据插入是否正确(插入地址是否存在)
在线性数据表中数据只能依次排序,所以要确定数据插入的地方是否是存储在指定范围内
如c
x>0||x<=储存数据的个数
确定表未满
2.确认插入数据位置
如果是在最后一个则直接插入
如果不是则插入前要倒着遍历赋值
然后再将数据插入相应位置

点击查看代码
int add(Array* ar, int x,int m)
{//ar传入结构体,x数据位置,m数据
	if (ar->size < max) {
		if (x == ar->size)
		{
			ar->date[x] = m;
			ar->size++;
		}
		else {
			for (int i = ar->size; i > x; i--) {
				ar->date[i] = ar->date[i-1];//最后一位等于前面一位数据

			}
			ar->date[x] = m;
			ar->size++;
		}
		return 1;
	}
	else printf("传入数据超出储存范围");
	return 0;
}


1.确认线性表是否为空表
若为空表则输出线性表为空表,
2.确认数据位置
如找到数据则返回数据对应序号
如无则返回-1

int find(Array* ar, int k) 
{
	for (int i = 0; i < ar->size; i ++ ) {
		if (ar->date[i] == k)return i;
	}
	return -1;
}


1.确认线性表是否为空表
2.查找相应数据位置,根据查找函数的返回值确认接下来的操作
返回值为-1,则return 0也可以输出未找到该数据
反之则从当前序号开始往后循环进行赋值处理
最后让储存数据个数加一

int delet(Array* ar, int k) 
{
	if (ar->size == 0)return -1;
	//数组里面没有数据
	int i = find(ar, k);
	if (i == -1)return -1;
	//数组里面没找到相应数据
	for (; i < ar->size-1; i++) {
		ar->date[i] = ar->date[i + 1];

	}
	ar->size--;
	return 0;
      
}


这个操作与删减操作差不多
在查找到相对数据的序号后
让这个序号所对应数据进行更改

int change(Array* ar, int k,int y) {
	if (ar->size == 0)return -1;
	int j = find(ar, k);
	if (j == -1)return -1;
	ar->date[j] == y;
	return 0;
}
posted @ 2025-12-19 12:55  爱偷懒的我  阅读(5)  评论(0)    收藏  举报