顺序表的插入删除查找

该博客展示了如何使用C语言实现顺序表的基本操作,包括初始化、扩容、插入元素、删除元素以及按值查找元素。代码详细解释了每个函数的功能,如InitList用于初始化顺序表,IncreaseList用于扩大表的容量,CreateElem用于写入元素,InsertList用于插入元素,DeleteList用于删除元素,LocateElem用于查找元素的位置。
摘要由CSDN通过智能技术生成
#include<stdio.h>
#include<stdlib.h>
#define InitSize 8//默认内存空间为8 
typedef struct{
    int *data;   //指针指向data中的第一个元素 
    int MaxSize;//顺序表的最大容量 
    int length;//顺序表的长度 
}SqList; 

void InitList(SqList &L){//初始化顺序表   
     L.data==(int *)malloc(InitSize*sizeof(int)); 
     L.length=0;
     L.MaxSize=InitSize;     
}

void IncreaseList(SqList &L,int len){//扩大表的容量,扩大长度为len
   int *q=L.data;               //将data中的数据存放到q中 
   L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));//扩大顺序表容量 
   for(int i=0;i<L.length;i++)  //将q中的数据复制到新容量的data中 
      L.data[i]=q[i];
    L.MaxSize=L.MaxSize+len; //顺序表最大容量增加len 
   free(q); 
   
}


void CreateElem(SqList &L){  //写入元素 
    
    int i,n;
    scanf("%d",&n);
    printf("你将在顺序表中写入%d个数据\n",n);
    
    for(i=0;i<n;i++){
        
        printf("请输入第 %d 个元素:",i+1);
        scanf("%d",&L.data[i]);
        
        L.length++;
    }
}

void show_Sq(SqList &L){
    
    printf("当前顺序表中的元素:\n");
    
    for(int i=0;i<L.length;i++){
        printf("%d ",L.data[i]);
    }
    printf("\n");
}

bool InsertList(SqList &L,int i,int e){//插入元素  第i个位置插入e 
    
    if(i<1||i>L.length+1)
      return false;
    if(L.length>L.MaxSize||L.length==L.MaxSize)
      return false;
    
    for(int j=L.length;j>i-1;j--)
        L.data[j]=L.data[j-1];
        
    L.data[i-1]=e;
    L.length++;
    
    printf("插入一个元素后");
     
    show_Sq(L);
    
    return true;
}

bool DeleteList(SqList &L,int i){//删除顺序表中第i个位置的元素 

    
    if(i<1||i>L.length)  //i不符合要求就返回false 
       return false;
       
   

    for(int j=i;j<=L.length-1;j++)   
        L.data[j-1]=L.data[j];
    L.length--; //如果i刚好等于顺序表长度,不执行循环,直接减少length的长度 
    
    
    printf("删除一个元素");
    show_Sq(L); 
    
    return true;
}

int LocateElem(SqList &L,int e){//按值查找 
    for(int i=0;i<L.length;i++){
        if(L.data[i]==e){    
          printf("找到%d,它在第%d位",e,i+1);
         return i+1;
        }
    }
    return 0; 
} 


int main(){
    
    SqList L;//声明一个顺序表L 
    
    InitList(L); //初始化顺序表 
    
    IncreaseList(L,5); //扩容 
    printf("扩容后的内存=%d",L.MaxSize);
    
    CreateElem(L); //添加元素 
    
    show_Sq(L);  //展示顺序表中的元素 
    printf("当前顺序表的长度:%d\n",L.length);
    
    //InsertList(L,3,6); //在顺序表第3个位置插入元素6 
    
    DeleteList(L,3);
    
    LocateElem(L,2);
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值