#ifndef _SEQ_TABLE_H__
#define _SEQ_TABLE_H__
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#define SUCCESS 0
#define FAILURE -1
typedef int ElemType;
//顺序表
struct SeqTable{
ElemType *elems; //使用动态内存 申请内存空间
size_t size; //元素的个数 _size
size_t cap; //顺序表的容量 _cap
};
#define STSIZE sizeof(struct SeqTable)
//ST 就相当于 struct SeqTable *
typedef struct SeqTable * ST;
//创建一个指定容量的顺序表 分配内存空间 fopen
ST create_seqtable(size_t cap);
//销毁顺序表 释放内存空间 fclose FILE
void destroy_seqtable(ST st);
//静态顺序表 不能扩容 是否已满
bool full_seqtable(ST st);
//顺序表是否为空
bool empty_seqtable(ST st);
//顺序表中元素个数
size_t size_seqtable(ST st);
//顺序表的容量
size_t capacity_seqtable(ST st);
//在顺序表末尾添加一个元素 e 返回值表示插入是否成功
int push_back_seqtable(ST st,ElemType e);
//在指定位置pos(下标)插入一个元素e
int insert_seqtable(ST st,size_t pos,ElemType e);
//删除指定位置的元素
int remove_seqtable(ST st,size_t pos,ElemType *pe);
//删除最后一个位置的元素
int pop_back_seqtable(ST st,ElemType *pe);
//删除所有值等于e的元素
int delete_all_seqtable(ST st,ElemType e);
//删除第n个值等于e的元素
int delete_count_seqtable(ST st,ElemType e,size_t n);
//修改 更新
int update_seqtable(ST st,size_t pos,ElemType ne);
//索引 根据位置获取对应的元素
ElemType *elem_of_seqtable(ST st,size_t pos);
//查找 查找第n个元素e 返回其下标位置
int find_seqtable(ST st,ElemType e,size_t n);
size_t count_seqtable(ST st,ElemType e);
//查找 根据条件查找第n个满足条件的元素
int search_seqtable(ST st,bool (*condition)(ElemType *pe),size_t n);
//迭代
void foreach_seqtable(ST st,void (*foreach)(ElemType *pe));
//清空
void clear_seqtable(ST st);
#endif //_SEQ_TABLE_H__