数据结构—线性表

  • 线性表定义

typedef int DataType;
struct seqList
{//有3个数据成员
  int MAXNUM;//用于记录顺序线性表中能存放的最大元素个数的 整型 MAXNUM   存储容量
  int curNum;//用于存放顺序线性表中数据元素的个数  整型  curNum        目前存储个数
  DataType *element;//用于存放顺序线性表数据元素的连续空间的起始地址  
};
  • 创造一个空的顺序线性表

PseqList createNullList_seq(int m)
{//此处填写代码,创建一个空的顺序线性表,能存放的最大元素个数为 m
 //若m=0,则返回NULL 
    if(m==0) return NULL;
    PseqList head=(PseqList)malloc(sizeof(struct seqList));
    if(head==NULL) return NULL;
    head->MAXNUM=m;
    head->curNum=0;
    head->element=(DataType*)malloc(sizeof(DataType)*m);
    if(head->element==NULL){
      free(head);return NULL;
    }
    return head;
}
  •  判断线性表是否为空
int isFullList_seq(PseqList L)
{
  //判断顺序线性表是否已满,若已满,返回值为1,否则返回值为0
  if(L->MAXNUM==L->curNum) return 1;
  else return 0;
 

}

 插入元素

int insertP_seq(PseqList L , int p ,int x)
{// 在线性表L中下标为p的位置插入数据元素x,若下标p非法或线性表已满无法插入数据,返回0;插入成功返回值为1
   //如果线性表满了, 还需输"list is full"的提示
  //如果插入位置非法,需输出提示"position is illegel" 
    if(p<0||p>L->MAXNUM) {
      printf("position is illegel");return 0;
    }
    if(isFullList_seq(L)==1){
      printf("list is full");return 0;
    }
    for(int i=L->curNum-1;i>=p;i--) L->element[i+1]=L->element[i];
    L->element[p]=x;
    L->curNum++;
    return 1;
}

 输出元素

void printList_seq(PseqList L)
{//逐个输出线性表的元素,相邻的两个数据元素之间以一个空格为分隔符隔开
  for(int i=0;i<L->curNum;i++){
    printf("%d ",L->element[i]);
  }
}

销毁线性表

int destroyList_seq(PseqList L)
{
    //返回值为销毁的线性表中现有数据元素的个数,若待销毁的线性表不存在,则返回0
    if(L==NULL) return 0;
    int ans=L->curNum;
    free(L);
    return ans;
}

 查找X首次出现的位置

int locate_seq(PseqList L,int x)
{//在顺序表L中查找给定值x首次出现的位置,若不存在给定值,则返回-1
    for(int i=0;i<L->curNum;i++){
      if(L->element[i]==x) return i;
    }
    return -1;
}

 查找指定位置处的元素

DataType locatePos_seq(PseqList L,int pos)
{// 在顺序表L中查找指定位置pos处的数据元素,若位置非法,则返回第0个数据元素
    if(pos<0||pos>L->MAXNUM) return L->element[0];
    return L->element[pos];
}

 删除指定下标的元素

int deletePos_seq(PseqList L,int pos)
{//在顺序表L中删除与下标pos处的数据元素,若pos非法,则返回-1;否则返回1
    if(pos<0||pos>L->curNum-1) return -1;
    for(int i=pos;i<L->curNum-1;i++) L->element[i]=L->element[i+1];
    L->curNum--;
    return 1;
}

 删除与X相同的所有元素

int delete_seq(PseqList L,int x)
{//在顺序表L中删除与参数x值相同的数据元素,返回删除数据元素的个数
  //可以使用之前已完成的操作
  int pos,res=0,flag;
  while(1){
    pos=locate_seq(L,x);
    if(pos==-1) break;
    deletePos_seq(L,pos);
    res++;
  }
  return res;
  
  
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值