线形表小结(顺序表)

顺序表表结构体(DataType都是所存数据的类型)

struct SeqList{
  int MAXNUM;  //可存放个数
  int n;  //实际长度
  DataType *element;
}

typedef struct SeqList *PSeqList;//定义结构体指针

//创建空顺序表(带参数m就是表空间大小)

PSeqList creatNullList_seq(int m){
  PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));//申请空间
  if(palist != NULL)
  {
    palist->element = (DataType*)malloc(sizeof(DataType)*m);//申请空间存下数据

   if(palist->element)
    {
      palist->MAXNUM = m; 
      palist->n = 0;                          //实际长度为0 一个数也没有

      return palist;
    }
    else  
      free palist;
  }
  printf(“out of space!!\m”);
  return NULL;
}

//判断线性表是否为空

int isNULLList_seq(PSeqList palist){  //直接查询n大小即可
  return (palist->n==0);
}

//求某元素下标

int locate_seq(PSeqList palist,DataType x)  //x为要求的数字
{
  int q;
  for(q=0;q<palist->n;q++)  //遍历整个顺序表
  {
    if(palist->element[q] == x)
    return q;
  }
  return -1;
}

//顺序表的插入,☞在固定的某一位下标后面插入

int insertPre_seq(PSeqList palist,int p,DataType x) //在palist所指顺序表中下标为p的元素之前插入元素x

{
  int q;
  if(palist->n >= palist->MAXNUM)  //判断顺序表是否已满员
  {
    printf("overflow!!\n");
    return 0;
  }
  if(p<0 || p>palist->n){   //再判断是否有下标为p的元素
    printf("No exist!\n");
    return 0;
  }
  for(q=palist->n-1;q>=p;q--)  // 从后往前一直到p 由于0被计算入下标 n-1才是最后一个数的下标


  palist->element[q+1] = palist->element[q];  //把q后面包括q的数往后移动一位,隐藏在内的是移动就是复制到下一空间
  palist->element[p] = x;  //这里p位置存的数覆盖掉
  palist->n = palist->n+1;  //实际长度加一
  return 1;
}

//顺序表的删除

int deleteP_seq(PList palist,int p){ //删除下标为q的元素
  int q;
  if(p<0 || p->palist->n-1){  //判断是否存在下标为q的数
    printf("No exist~!\n");
    return 0;
  }
  for(q=p;q<=palist->n-1;q++) //从p开始遍历顺序表
  palist->element[q]=palist->element[q+1];//将顺序的下一个数复制给上一个数,到最后n里面的空 因此原来下标为n-1的数据归零
  palist->n = palist->n-1; //数据长度减1
  return 1;
}

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值