找回密码
 立即注册
首页 业界区 安全 顺序表实现线性结构

顺序表实现线性结构

腥狩频 5 小时前
顺序表的优点
能够随机储存和访问,能通过数组名(首数据地址)+元素序号(偏移量)直接访问
a[5]能够访问第五个数据,链表需要遍历才可以
缺点
大小确定,扩容不方便
数据改动时需要的操作太多如增删
在这个操作后,需要把后面数据全部改动
  1. typedef struct ArrayList {
  2.         int* date;//指针模拟开数组,
  3.         int size;//实际数据大小
  4. }Array;
  5. Array initArray(){
  6.         Array a;
  7.         a.date = (int*)malloc(sizeof(int) * max);
  8.         if (a.date == NULL) {
  9.                 printf("内存分配失败");
  10.                 return a;
  11.         }
  12.         a.size = 0;
  13.         return a;
  14. }//初始化
复制代码

1.确定数据插入是否正确(插入地址是否存在)
在线性数据表中数据只能依次排序,所以要确定数据插入的地方是否是存储在指定范围内
如c
x>0||xsize < max) {                if (x == ar->size)                {                        ar->date[x] = m;                        ar->size++;                }                else {                        for (int i = ar->size; i > x; i--) {                                ar->date = ar->date[i-1];//最后一位等于前面一位数据                        }                        ar->date[x] = m;                        ar->size++;                }                return 1;        }        else printf("传入数据超出储存范围");        return 0;}[/code]查
1.确认线性表是否为空表
若为空表则输出线性表为空表,
2.确认数据位置
如找到数据则返回数据对应序号
如无则返回-1
  1. int add(Array* ar, int x,int m)
  2. {//ar传入结构体,x数据位置,m数据
  3.         if (ar->size < max) {
  4.                 if (x == ar->size)
  5.                 {
  6.                         ar->date[x] = m;
  7.                         ar->size++;
  8.                 }
  9.                 else {
  10.                         for (int i = ar->size; i > x; i--) {
  11.                                 ar->date[i] = ar->date[i-1];//最后一位等于前面一位数据
  12.                         }
  13.                         ar->date[x] = m;
  14.                         ar->size++;
  15.                 }
  16.                 return 1;
  17.         }
  18.         else printf("传入数据超出储存范围");
  19.         return 0;
  20. }
复制代码

1.确认线性表是否为空表
2.查找相应数据位置,根据查找函数的返回值确认接下来的操作
返回值为-1,则return 0也可以输出未找到该数据
反之则从当前序号开始往后循环进行赋值处理
最后让储存数据个数加一
  1. int find(Array* ar, int k)
  2. {
  3.         for (int i = 0; i < ar->size; i ++ ) {
  4.                 if (ar->date[i] == k)return i;
  5.         }
  6.         return -1;
  7. }
复制代码

这个操作与删减操作差不多
在查找到相对数据的序号后
让这个序号所对应数据进行更改
  1. int delet(Array* ar, int k)
  2. {
  3.         if (ar->size == 0)return -1;
  4.         //数组里面没有数据
  5.         int i = find(ar, k);
  6.         if (i == -1)return -1;
  7.         //数组里面没找到相应数据
  8.         for (; i < ar->size-1; i++) {
  9.                 ar->date[i] = ar->date[i + 1];
  10.         }
  11.         ar->size--;
  12.         return 0;
  13.       
  14. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册