C语言顺序表(动态分配)全部功能实现(建表,初始化,内存分配,增,删,改,查)

#include<stdio.h>
#include <stdlib.h>
# define initsize  5
typedef struct node {
    int * data;
    int maxsize;
    int length;
    
}Sqlist;

 void  Initlist (Sqlist &L){                        //初始化顺序表 
     
     L.data=(int *)malloc(sizeof(int)*initsize);
     L.length=0;
     L.maxsize=initsize; 
 }
 void increasesize (Sqlist &L,int len){                            //扩充容量 
     int*p=L.data;
     L.data=(int *)malloc(sizeof(int)*(initsize+len)) ;
     for(int i=0;i<L.length;i++){
         L.data[i]=p[i]; 
         }
         L.maxsize=initsize+len;
         free(p); 
         printf("扩充了容量\n"); 
    
     
 } 
 void look(Sqlist &L){                    //查看表中元素 
      for(int i=0;i<L.length;i++){
          printf("L.data[%d]=%d\n",i,L.data[i]);
          
      }
      printf("L.length=%d\n",L.length);
  }


  bool insert (Sqlist &L,int i,int a){                //插入元素 
      if(i<1||i>L.length+1){
          printf("插入不合法\n");
          return 0;
      }
      for(int j=L.length;j>=i;j--){
          L.data[j]=L.data[j-1];
      }
      L.data[i-1]=a;
      L.length++;
      if(L.length==L.maxsize){
          increasesize(L,5);
      }
      printf("插入成功\n");
      return true; 
  }
 bool   Delete1 (Sqlist &L,int i,int &del){                //根据位序删除元素,并将元素带回来 
     

     if(i<1||i>L.length-1){
          printf("删除不合法\n");
          return 0;
      }else
     del=L.data[i-1];
      
          
      
      for(int j=i-1;j<L.length-1;j++){
          L.data[j]=L.data[j+1];
      }
      L.length--;
      printf("删除成功,删除的元素为%d\n",del);
      return true;
  }
  bool Delete2(Sqlist &L,int a,int &del){            //    根据元素的值删除元素,并将位序带回来 
      for(int i=0;i<L.length;i++){
          if(L.data[i]==a){
          del=i+1;        
           for(int j=i;j<L.length-1;j++){
          L.data[j]=L.data[j+1];
      }
      L.length--;
      printf("删除成功,删除的元素为位序为%d\n",i+1);
              return true;
          }
      }
      printf("未找到该元素,删除失败"); 
      return 0;
  }
 bool alter(Sqlist &L,int i,int a){                //更改元素 
      if(i<1||i>L.length-1) {
          printf("该位序不合法"); 
          return 0; 
      }
      L.data[i-1]=a;
      printf("更改成功\n");
      return true; 
      
 }
 bool seek1(Sqlist &L,int i,int &value){    
                                                //根据位序查找元素,并把值带回来; 
         if(i<1||i>L.length-1) {
          printf("该位序不合法"); 
          return 0; 
      }
     value=L.data[i-1];
     
      printf("查找成功,第%d位元素为%d\n",i,value); 
      return true;
     
        

 }
 bool seek2(Sqlist&L,int a,int &value)             //根据元素的值寻找元素的位序 ,并将位序带回来  
 
 {
     for(int i=0;i<L.length;i++){
          if(L.data[i]==a){
              value=i+1;
              printf("找到了位序为%d\n",i+1);
              return true;
          }    
    }
    printf ("未查找到\n")  ;
             return     0;
      
 }
int main(){
    Sqlist L;
    Initlist (L);
    
    insert(L,1,1);
    insert(L,2,2);
    insert(L,3,3);
    insert(L,4,4);
    insert(L,1,1);
    look(L);
    int del;
    Delete1 (L,2,del);  //将第2位的元素删除,并返回元素的值; 

            look(L);
            int del2;
    Delete2(L,4,del2) ; //将值为4的元素删除,并返回位序 ; 
    printf("del2=%d\n",del2);
            look(L);
        alter(L,1,7);         //将第一位改成7 ; 
        look(L);
        int value;
        seek1(L,1,value);    //查找第1位元素的值; 
        printf("第一位元素位%d",value); 
        seek2(L,3,value);        //查找值为3的元素;
        printf("值为3的元素位序为%d",value) ;
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值