数据结构之----线性表其一---顺序表
线性表需满足的条件:
1,除了第一个和最后一个元素,中间的每个元素都有一个前驱和后继。
2,第一个元素只有一个后继。
3,最后一个元素只有一个前驱。
顺序表的基本操作:
(1)线性表初始化
typedef struct ArrayList
{int *data;//指针模拟声明数组int len;//表长
}Array;
(2)追加数据
//追加数据k
Array appendData(Array a,int k){if(a.len == maxx){printf("顺序表已满\n");return a;}a.data[a.len] = k;a.len++;//指向下一个位置return a;
}
(3)指定位置添加数据
//在指定位置添加数据k
Array addData(Array a,int index,int k){if(a.len == maxx){printf("顺序表已满\n");return a;}//将元素往后移动for(int i=a.len-1;i>=index;i--){a.data[i+1] = a.data[i];}//添加a.data[index] = k;return a;
}
(4)按顺序输出数据
//按顺序输出数据
void printData(Array a)
{if(a.len == 0){printf("顺序表为空\n");}for(int i=0;i<a.len;i++){printf("%d",a.data[i]);}
}
(5)查找数据
//查找数据k所在的位置
int FindData(Array a,int k){int i;for(int i=0;i<a.len;i++){if(a.data[i] == k){return i;}}return -1;//不存在返回-1
}
(6)删除数据
//删除数据k
Array deleteData(Array a,int k)
{int kk = FindData(a,k);if(kk != -1){for(int j=kk;j<a.len;j++){a.data[j] = a.data[j+1];}a.len--;return a;}else{return a;}}
(7)更改数据
//更改数据old为k
Array changeData(Array a,int old,int k){int kk = FindData(a,old);if(kk != -1){a.data[kk] = k;return a;}else{return a;}
}
顺序表的优缺点:
优点:支持随机读取 首地址+偏移量
存储密度大
缺点:插入,删除太过繁琐
缺点大于优点
适用于:数据稳定(插入和删除操作少)的相关场景,比如说教务系统