1. 头文件
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#define MAXSIZE 100
typedef int data_t;
typedef struct {
data_t data[MAXSIZE];
int last;// 数据的下标
}seqlist_t;
seqlist_t* create_seqlist(void);
void clear_seqlist(seqlist_t *L);
int is_empty_seqlist(seqlist_t *L);
int is_full_seqlist(seqlist_t *L);
void set_empty_seqlist(seqlist_t *L);
int get_length_seqlist(seqlist_t *L);
void show_seqlist(seqlist_t *L);
int insert_seqlist(seqlist_t *L,data_t x,int pos);
int delete_seqlist(seqlist_t *L,int pos);
int change_seqlist(seqlist_t *L,data_t x,int pos);
int search_seqlist(seqlist_t *L,data_t x);
#endif
2. 方法实现
2.1 创建顺序表
//创建表, 新建了 元素为 MAXSIZE 个 顺序表
seqlist_t *create_seqlist(void){
seqlist_t *L = NULL;
//malloc 返回void * ,需要强制转换
L = (seqlist_t *)malloc(sizeof(seqlist_t));
if(L == NULL){
puts("no memory");
return NULL;
}
L->last = -1;
return L;
}
2.2 清空表
//清空表
void clear_seqlist(seqlist_t *L){
if(L == NULL){
puts("seqlist is NULL");
return;
}
free(L);
return;
}
2.3 判断顺序表是否为空
int is_empty_seqlist(seqlist_t *L){
if(L == NULL){
puts("seqlist is empty");
return -1;
}
return (L->last == -1);
}
2.4 设置顺序表为空
void set_empty_seqlist(seqlist_t *L){
if(L == NULL){
puts("seqlist is NULL");
return;
}
L->last = -1;
return;
}
2.5 获取长度
int get_length_seqlist(seqlist_t *L){
if(L == NULL){
puts("seqlist is NULL");
return -1;
}
return (L->last+1);
}
2.6 判断表是否已满
int is_full_seqlist(seqlist_t *L){
if(L == NULL){
puts("seqlist is NULL");
return -1;
}
return (L->last == MAXSIZE -1);
}
2.7 打印表
void show_seqlist(seqlist_t *L){
int i=0;
if(L == NULL){
puts("seqlist is NULL");
return;
}
for(i=0;i<=L->last;i++){
printf("L->data[%d] = %d\n",i,L->data[i]);
}
return;
}
2.8 在指定位置插入元素
int insert_seqlist(seqlist_t *L,data_t x,int pos){
int i = 0;
if((is_full_seqlist(L))||(pos < 0)||(pos > L->last+1)){
puts("input argv is invalid");
return -1;
}
for(i=L->last;i>=pos;i--){
L->data[i+1] = L->data[i];
}
L->data[pos] = x;
L->last++;
return 0;
}
2.9 删除指定位置的元素
int delete_seqlist(seqlist_t *L,int pos){
int i = 0;
if((pos<0) ||(pos>L->last+1)){
puts("input argv invalid");
return -1;
}
for(i=pos+1;i<=L->last;i++){
L->data[i-1]=L->data[i];
}
L->last--;
return 0;
}
2.10 改变指定位置的元素
int change_seqlist(seqlist_t *L,data_t x,int pos){
if((pos<0) ||(pos>L->last+1)){
puts("input argv invalid");
return -1;
}
L->data[pos] = x;
return 0;
}
2.11 查找元素对应坐标
int search_seqlist(seqlist_t *L,data_t x){
int i=0;
for(i=0;i<=L->last;i++){
if(L->data[i] == x){
return i;
}
}
return -1;
}