C 语言动态顺序表

test.h

cpp 复制代码
#ifndef _TEST_H
#define _TEST_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef int data_type;

// 定义顺序表结构体
typedef struct List{
    data_type *data; // 顺序表数据
    int size; // 顺序表当前长度
    int count; // 顺序表容量
}list;

typedef enum{
    OK,
    LIST_EMPTY,
    LIST_FULL,
    INDEX_ERROR,
   
}RETURNVALUE;


list *create_list(void);

int list_insert(list *plist, int index, data_type data);

int list_show(list *plist);

#endif

main.c

cpp 复制代码
#include "../include/test.h"

int main()
{
    int retval = 0;

    list *plist = create_list();

    retval = list_insert(plist, 0, 1);
    retval = list_insert(plist, 1, 2);
    retval = list_insert(plist, 2, 3);
    retval = list_insert(plist, 1, 4);

    
    retval = list_show(plist);

    return 0;
}

crud.c

cpp 复制代码
#include "../include/test.h"

// 创建动态顺序表
list *create_list(void)
{
    int list_size = 0; // 初始化顺序表大小
    list *plist = (list *)malloc(sizeof(list)); // 申请内存空间
    if(plist == NULL){
        perror("plist malloc error!");
        return NULL;
    }

    memset(plist, 0, sizeof(list)); // 清零

    // 手动输入顺序表大小
    printf("请输入顺序表大小:");
    scanf("%d", &list_size);

    // 申请内存空间
    plist->data = (data_type *)malloc(sizeof(data_type) * list_size);

    // 初始化顺序表的大小
    plist->size = list_size;
    return plist; // 返回顺序表指针
}

int list_insert(list *plist, int index, data_type data)
{
    // 入参检测
    if(plist == NULL){
        return LIST_EMPTY;
    }
    
    // 检测顺序表是否已满
    if(plist->count == plist->size){
        return LIST_FULL;
    }

    // 检测插入位置是否合法
    if(index < -1 || index > plist->count){
        return INDEX_ERROR;
    }

    // 插入操作:尾插
    if(index == -1){
        plist->data[plist->count] = data;
        plist->count++;
        return OK;
    }

    // 移动元素,实际上在用户按规律顺序插入元素的时候,不会调用此循环,而是直接
    // 执行 plist->data[index] = data; 的操作
    for(int i = plist->count; i > index; i--){
        printf("for(int i = plist->count; i > index; i--){\n");
        plist->data[i] = plist->data[i - 1];
    }

    // 插入元素
    plist->data[index] = data;

    // 顺序表元素个数加一
    plist->count++;

    return OK;
}

int list_show(list *plist)
{
    if(plist == NULL || plist->count == 0){
        return LIST_EMPTY;
    }
    
    // 遍历顺序表
    for(int i = 0; i < plist->count; i++){
        printf("%d\t\n", plist->data[i]);
    }
    putchar(10);

    return OK;
}
相关推荐
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
wuminyu2 小时前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
思麟呀5 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
SuperByteMaster6 小时前
低功耗GPIO引脚配置
c语言
phltxy6 小时前
C 语言自定义类型:结构体、位段、枚举与联合体
c语言·开发语言
大侠归来8 小时前
C语言与C++在基础语法上的区别
java·c语言·c++
cu1439 小时前
细谈GM8229的具体功能与其应用
c语言·c++·人工智能·单片机
大侠归来10 小时前
C语言内存管理:从栈到堆的完整指南
c语言·开发语言·python
cu14310 小时前
细谈GM7123C的具体功能与其应用
c语言·c++·人工智能·嵌入式硬件
Logic10111 小时前
C语言/数据结构位运算题解:异或XOR找出弹子游戏机中数量为奇数的数字——只出现奇数次
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质