ds_day03

作业

题目

  1. 顺序表按元素删除

    • 思路:
      • 参数【顺序表 删除的值 key
      • 根据删除的元素得到下标
      • 根据下标实现【按下标删除】
  2. 顺序表排序【类似数组排序】
    比较:if( list->data[j] > list->data[j+1])

  3. 复习今天的学习内容

结果

在这里插入图片描述

代码

main.c

#include "func.h"

int main(int argc, char const *argv[])
{
    // 创建空表
    SeqList *list = list_create();

    // 表尾插入
    for (int i = 0; i < MAXSIZE; i++){
        list_rear_insert(list,(DataType)(i * 7));
    }

    // 遍历
    list_traverse(list);

    /********************************
     *      作业1:按元素删除
    ********************************/
   
    // 按元素删除
    printf("顺序表按元素56删除后\n");
    list_elem_delete(list,56);

    // 遍历
    list_traverse(list);

    /********************************
     *      作业2:顺序表排序
    ********************************/

    // 排序
    list_sort(list);

    // 遍历
    printf("顺序表排序后\n");
    list_traverse(list);


    return 0;
}

func.h

#include "func.h"

/*
* 创建顺序表 
* @return 成功 顺序表指针   失败NULL
*/
SeqList *list_create(){
    SeqList *l = (SeqList *)malloc(sizeof(SeqList));
    if(l == NULL){
        return NULL;
    }
    l->len = 0;
    return l;
}

/*
* 尾部插入
* @param   l  顺序表
* @param   e  要插入的元素
* @return  成功0    失败-1
*/
int list_rear_insert(SeqList *l,DataType e){
    if(list_is_full(l)){
        printf("顺序表满\n");
        return -1;
    }
    
    l->data[l->len] = e;
    l->len++;

    return 0;
}

/*
* 判断表是否满
* @param   l  顺序表
* @return  满-1    未满0
*/
int list_is_full(SeqList *l){
    return l->len == MAXSIZE ? -1 : 0;
}

/*
*  遍历输出
* @param   l  顺序表
* @param   e  要插入的元素
* @return  成功0    失败-1
*/
int list_traverse(SeqList *l){
    for (int i = 0; i < l->len; i++){
        printf("list[%d]=%d\t",i,l->data[i]);
        // printf("(%d, %d)\t",i,l->data[i]);
    }
    putchar('\n');
}


/*
* 按元素删除
* @param   l  顺序表
* @param   e  要删除的元素
* @return  成功0    失败-1
*/
int list_elem_delete(SeqList *l,DataType e){
    //找到下标
    int index = list_elem_indexof(l,e);
    //按下标删除
    list_delete(l,index);

    return 0;
}

/*
* 按元素查找
* @param   l  顺序表
* @param   e  要查找的元素
* @return  成功 元素下标    失败 -1
*/
int list_elem_indexof(SeqList *l,DataType e){
    for (int i = 0; i < l->len; i++){
        if(l->data[i] == e){
            return i;
        }
    }

    return -1;
}

/*
* 按下标删除元素 
* @param   l  顺序表
* @param   index  要删除元素的下标
* @return  成功0    失败-1
*/
int list_delete(SeqList *l,int index){
    // 判空
    if(list_is_empty(l)){
        printf("顺序表空\n");
        return -1;
    }
    // 判断下标
    if(index < 0 || index >= l->len){
        printf("非法下标\n");
        return -1;
    }

    // 循环前移
    for (int i = index + 1; i < l->len; i++){
        l->data[i - 1] = l->data[i];
    }

    // 表长-1
    l->len--;

    return 0;
}

/*
* 判断表是否空
* @param   l  顺序表
* @return  空-1    未空0
*/
int list_is_empty(SeqList *l){
    return l->len == 0 ? -1 : 0;
}


/*
* 顺序表排序
* @param   l  顺序表
* @return  无返回值
*/
void list_sort(SeqList *l){
    // 冒泡排序
    for (int i = 0; i < l->len - 1; i++){
        for (int j = 0; j < l->len - 1 - i; j++){
            DataType t = l->data[j];
            l->data[j] = l->data[j+1];
            l->data[j+1] = t;
        }
    }
    
}

func.c

#if !defined(_FUNC_H_)
#define _FUNC_H_

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 10

// 定义顺序表
typedef int DataType;

typedef struct{
    DataType data[MAXSIZE];
    int len;
}SeqList;

SeqList *list_create();
int list_is_full(SeqList *l);
int list_rear_insert(SeqList* l,DataType e);
int list_traverse(SeqList* l);
int list_elem_delete(SeqList *l,DataType e);
int list_elem_indexof(SeqList* l,DataType e);
int list_delete(SeqList *l,int index);
int list_is_empty(SeqList *l);
void list_sort(SeqList *l);

#endif // _FUNC_H_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值