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;
}
相关推荐
计算机安禾2 小时前
【C语言程序设计】第35篇:文件的打开、关闭与读写操作
c语言·开发语言·c++·vscode·算法·visual studio code·visual studio
CODE_RabbitV3 小时前
【3min 解决】keil5 编译stm32 出现一堆 core_cm3.c 报错问题
c语言·stm32·嵌入式硬件
weixin_537590453 小时前
《C程序语言设计》练习答案(练习1-3)
c语言·开发语言
爱编码的小八嘎3 小时前
C语言完美演绎4-10
c语言
智者知已应修善业5 小时前
【51单片机用两个定时计数器级联实现定时】2023-04-12
c语言·经验分享·笔记·算法·51单片机
vx-程序开发6 小时前
springboot在线装修管理系统-计算机毕业设计源码56278
java·c语言·spring boot·python·spring·django·php
_饭团6 小时前
字符串函数全解析:12 种核心函数的使用与底层模拟实现
c语言·开发语言·学习·考研·面试·蓝桥杯
呆瑜nuage7 小时前
【复习系列】高频C/C++库函数手写实现指南与自定义类型的理解指南
c语言·c++·面试
AI+程序员在路上7 小时前
CAN 总线与 Linux SocketCAN C 语言测试程序
linux·c语言·网络
浅念-7 小时前
C ++ 智能指针
c语言·开发语言·数据结构·c++·经验分享·笔记·算法