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;
}
相关推荐
消失的旧时光-19431 小时前
用 C 实现一个简化版 MessageQueue
c语言·开发语言
Yue丶越2 小时前
【C语言】动态内存管理
c语言·开发语言
南棱笑笑生3 小时前
20251215给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-6.1】系统时统计eth1的插拔次数
linux·c语言·开发语言·rockchip
刃神太酷啦3 小时前
Linux 进程核心原理精讲:从体系结构到实战操作(含 fork / 状态 / 优先级)----《Hello Linux!》(6)
java·linux·运维·c语言·c++·算法·leetcode
永恒-龙啸3 小时前
spooling假脱机输入输出模拟
c语言·开源·github
前端世界3 小时前
从“看不懂”到“能用”:一次搞清 C 语言指针数组
c语言·开发语言
发疯幼稚鬼3 小时前
归并排序与快速排序
c语言·数据结构·算法·排序算法
福尔摩斯张3 小时前
TCP协议深度解析:从报文格式到连接管理(超详细)
linux·c语言·网络·c++·笔记·网络协议·tcp/ip
光子物联单片机3 小时前
STM32单片机开发入门(十一)STM32CubeIDE下载安装及开发调试说明
c语言·stm32·单片机·嵌入式硬件·mcu
_codemonster4 小时前
自然语言处理容易混淆知识点(一)c-TF-IDF和TF-IDF的区别
c语言·自然语言处理·tf-idf