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