#include <stdio.h>
#include <stdlib.h>
typedef int Type_data;
// 创建顺序表结构体
typedef struct SequentialList {
Type_data *data; // 顺序表起始地址
int size; // 空间大小
int index; //当前索引
}SequenList;
typedef enum SequentialOrder {
top,
bottom
}SequenOrder;
// 初始化顺序表
SequenList * sequen_list_init(Type_data size) {
SequenList *manager = (SequenList *)calloc(1, sizeof(SequenList));
if (!manager) {
exit(-1); //空间都没分配直接退出
}
manager->data = (Type_data *)calloc(size, sizeof(Type_data));
if (!manager->data) {
free(manager);
exit(-1);
}
manager->size = size;
manager->index = 0;
return manager;
}
// 增加顺序表元素
void sequen_list_add(SequenList *manager,SequenOrder order,Type_data data) {
if (manager->index + 1 == manager->size) {
perror("数据已满,不能新增数据");
return;
}
if (!manager->data) {
perror("数据插入失败");
return;
}
if (order == top) { //头插法
if (manager->index == 0) {
manager->data[0] = data;
manager->index++;
} else {
int index = manager->index;
while (index > 0) {
manager->data[index] = manager->data[index-1];
index--;
}
manager->data[0] = data;
manager->index++;
}
} else { // 尾插法
manager->data[manager->index++] = data;
}
}
// 删除顺序表元素
void sequen_list_delete(SequenList *manager,SequenOrder order) {
if (!manager->data) {
perror("数据删除失败");
return;
}
if (manager->index == 0) {
perror("顺序表为空,不能再删除");
return;
}
if (order == top) { // 从头部开始删除
int index = manager->index;
for (int i = 0; i < index; i++) {
manager->data[i] = manager->data[i + 1]; // 将后续元素前移
}
manager->index--;
} else { // 从尾部开始删除
for (int i = manager->index; manager->index <= 0; i--) {
manager->data[i+1] = manager->data[i];
}
manager->index--;
}
}
// 打印顺序表元素
void sequen_list_print(SequenList *manager) {
if (manager->index == 0) {
printf("当前顺序表无元素");
return;
}
printf("当前元素有%d个\n",manager->index);
for (int i = 0; i < manager->index; ++i) {
if (manager->data) {
printf("[%d]=%d\n",i,manager->data[i]);
} else {
printf("打印数据失败");
}
}
}
// 顺序表内存管理
void sequen_list_free(SequenList *manager) {
free(manager->data);
manager->data = nullptr;
free(manager);
}
int main() {
SequenList *manager = sequen_list_init(10);
sequen_list_add(manager,top,111);
sequen_list_add(manager,bottom,222);
sequen_list_delete(manager,top);
sequen_list_delete(manager,bottom);
sequen_list_print(manager);
sequen_list_free(manager);
}c-顺序表实现
相关推荐
发表评论
评论列表
xCObnOutFUssNtDzBkgJtjFR
gLaUvgKkiSKCTTEXjpKpeJj