데이터 구조 학습 시리즈의 시퀀스 테이블을 삭제하는 두 가지 방법

  • 방법 1:
  • 시퀀스 테이블 끝에 저장된 데이터 요소를 삭제합니다. 코드는 다음과 같습니다.
  • 샘플 코드:
int delete_seq_list_1(list_t *seq_list){
    
    

    if(NULL == seq_list){
    
    

        printf("入参为NULL\n");

        return -1;

    }
    if(0 == seq_list->count){
    
    

        printf("顺序表为空,删除失败\n");

        return -1;
    }
    seq_list->count--;

    return 0;
}
  • 지침:

  • 1. 형식 매개변수가 데이터 요소 삭제 기능이 있는 함수에 전달된 후 이를 수행해야 합니다 入参合理性检查.

  • 2. 아직은 판단이 필요합니다 顺序表所存储的数据元素是否为空.

  • 3. count是计数的变量, 每次删除一个数据元素后,需要减1, 여기 易忽略;

  • 방법 2:

  • 시퀀스 테이블의 어느 위치에서나 데이터 요소를 삭제하려면 코드는 다음과 같습니다.

  • 샘플 코드:

int delete_seq_list_2(list_t *seq_list,int pos){
    
    

    if(NULL == seq_list){
    
    

        printf("入参为NULL\n");

        return -1;

    }
    if(0 == seq_list->count){
    
    

        printf("顺序表为空,删除失败\n");

        return -1;
    }

     if( pos < 0 || pos >= seq_list->count){
    
    

        printf("删除位置不合理,删除失败\n");

        return -1;

    }

    int i = pos;

    while(i < seq_list->count-1){
    
    

        seq_list->a[i] = seq_list->a[i+1];

        i++;

    }

    seq_list->count--;

    return 0;

}
  • 지침:
  • 1. 방법 1과 동일: 형식 매개변수가 데이터 요소 삭제 기능이 있는 함수에 전달된 후 완료되어야 합니다 入参合理性检查.
  • 2. 방법 1과 동일: 아직 판단이 필요합니다 顺序表所存储的数据元素是否为空.
  • 3. 삭제될 데이터 요소를 판단할 位置在顺序表中是否合理필요가 있습니다 . 区别在任意位置插入数据元素的位置合理性检查두 요소는 약간 다릅니다 越界操作,所导致运行结果出错.
  • 4. while循环或者for循环삭제할 데이터 요소의 위치를 ​​찾은 후 이 위치 이후의 모든 데이터 요소의 依次向前挪动一个位置목적은 다음과 같습니다 删除所指定的待删除位置.
  • 5. 지정된 위치의 데이터 요소를 삭제한 후, 记得count减1;

추천

출처blog.csdn.net/qq_41878292/article/details/132640671