顺序表实现线性结构
顺序表的优点能够随机储存和访问,能通过数组名(首数据地址)+元素序号(偏移量)直接访问
a能够访问第五个数据,链表需要遍历才可以
缺点
大小确定,扩容不方便
数据改动时需要的操作太多如增删
在这个操作后,需要把后面数据全部改动
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||xsize < max) { if (x == ar->size) { ar->date = m; ar->size++; } else { for (int i = ar->size; i > x; i--) { ar->date = ar->date;//最后一位等于前面一位数据 } ar->date = m; ar->size++; } return 1; } else printf("传入数据超出储存范围"); return 0;}查
1.确认线性表是否为空表
若为空表则输出线性表为空表,
2.确认数据位置
如找到数据则返回数据对应序号
如无则返回-1
int add(Array* ar, int x,int m)
{//ar传入结构体,x数据位置,m数据
if (ar->size < max) {
if (x == ar->size)
{
ar->date = m;
ar->size++;
}
else {
for (int i = ar->size; i > x; i--) {
ar->date = ar->date;//最后一位等于前面一位数据
}
ar->date = m;
ar->size++;
}
return 1;
}
else printf("传入数据超出储存范围");
return 0;
}删
1.确认线性表是否为空表
2.查找相应数据位置,根据查找函数的返回值确认接下来的操作
返回值为-1,则return 0也可以输出未找到该数据
反之则从当前序号开始往后循环进行赋值处理
最后让储存数据个数加一
int find(Array* ar, int k)
{
for (int i = 0; i < ar->size; i ++ ) {
if (ar->date == k)return i;
}
return -1;
}改
这个操作与删减操作差不多
在查找到相对数据的序号后
让这个序号所对应数据进行更改
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 = ar->date;
}
ar->size--;
return 0;
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 收藏一下 不知道什么时候能用到 yyds。多谢分享 前排留名,哈哈哈 东西不错很实用谢谢分享 感谢分享,下载保存了,貌似很强大 yyds。多谢分享 收藏一下 不知道什么时候能用到 东西不错很实用谢谢分享 谢谢分享,试用一下 新版吗?好像是停更了吧。 热心回复! 谢谢楼主提供! 热心回复! 这个好,看起来很实用 懂技术并乐意极积无私分享的人越来越少。珍惜 用心讨论,共获提升! 热心回复! 用心讨论,共获提升! 感谢分享,学习下。
页:
[1]
2