首页 > 基础资料 博客日记

C 语言动态顺序表

2024-08-02 21:00:08基础资料围观123

Java资料网推荐C 语言动态顺序表这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣

test.h

#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

#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

#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;
}


文章来源:https://blog.csdn.net/qq_68495605/article/details/140699626
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云