用顺序存储结构实现线性表(c语言)

代码:

//用顺序存储结构实现线性表
#include<stdio.h>
#define MAXSIZE 11
//c语言中没有bool类型,想要使用的话需要自己定义
typedef int bool;
#define true 1
#define false 0

typedef struct{
  int data[MAXSIZE]; //data[0]不放东西
  int length;
}Sqlist;

//如果是指针类型,不能用L.data[i]访问
void initList(Sqlist *L){
  for(int i=0;i<MAXSIZE;i++){
    L->data[i]=0; //将所有元素设置为默认初始值
  }
  L->length=0; //顺序表初始长度为0
}

//i表示插入data[i]
bool listInsert(Sqlist *L,int i,int e){
   if(i<1||i>L->length+1){
     return false;
   }
   if(L->length>MAXSIZE-1){
     return false;
   }
   for(int j=L->length;j>i;j--){
     L->data[j+1]=L->data[j];
   }
   L->data[i]=e;
   L->length++;
   return true;
}

//删除data[i]
bool listDelete(Sqlist *L,int i,int *e){
   if(i<=0||i>L->length||L->length==0){
    return false;
   }
   *e=L->data[i];
   for(int j=i;j<L->length;j++){
    L->data[j]=L->data[j+1];
   }
   L->length--;
   return true;
}

//返回data[i]的值
int getElem(Sqlist L,int i){
   return L.data[i];
}

//找出元素值为e的数组下标
int locateElem(Sqlist L,int e){
   for(int i=1;i<=L.length;i++){
    if(L.data[i]==e){
        return i;
    }
   }
   return 0;
}

void printList(Sqlist L){
   for(int i=1;i<=L.length;i++){
     printf("%d ",L.data[i]);
   }
   printf("\n");
}

int main(){
  Sqlist L;
  initList(&L);
  listInsert(&L,1,1);
  listInsert(&L,2,3);
  listInsert(&L,3,4);
  listInsert(&L,4,5);
  printList(L);
  int e=-1;
  if(listDelete(&L,3,&e)){
    printf("删除元素为%d\n",e);
  }else{
    printf("删除失败\n");
  }
  printf("数组下标为3的值是%d\n",getElem(L,3));
  printf("元素值为1的下标为%d\n",locateElem(L,1));
  printList(L);
  return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值