#include "stdlib.h"
#include "stdio.h"
#define N 32
typedef int datatype_t;
typedef struct {
datatype_t data[N];
int last;
} seqlist_t;
// 创建一个线性表结构
seqlist_t *seqlist_create() {
seqlist_t *s1 = (seqlist_t *) malloc(sizeof(seqlist_t));
s1->last = -1;
return s1;
}
// 判断线性表结构是否已满
int seqlist_full(seqlist_t *list) {
return list->last == N - 1 ? 1 : 0;
}
// 不指定位置插入数据节点
int seqlist_insert(seqlist_t *list, int value) {
if (seqlist_full(list)) {
return -1;
}
list->last++;
list->data[list->last] = value;
return 1;
}
// 指定位置插入数据节点
int seqlist_pos_insert(seqlist_t *list, int pos, int value) {
if (seqlist_full(list)) {
return -1;
}
if (pos < 0 || pos > list->last + 1) {
return -1;
}
for (int i = list->last + 1; i > pos; --i) {
list->data[i] = list->data[i - 1];
}
list->data[pos] = value;
list->last++;
return 1;
}
// 显示顺序表中的内容
int seqlist_show(seqlist_t *list) {
for (int i = 0; i <= list->last; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
return 0;
}
// 判断线性表是否为空
int seqlist_empty(seqlist_t *list) {
return list->last == -1 ? 1 : 0;
}
// 不指定位置删除数据节点
int seqlist_delete(seqlist_t *list) {
if (seqlist_empty(list)) {
return -1;
}
datatype_t value = list->data[list->last];
list->last--;
return value;
}
// 指定位置删除数据节点
int seqlist_pos_delete(seqlist_t *list, int pos) {
if (seqlist_empty(list)) {
return -1;
}
if (pos < 0 || pos > list->last) {
return -1;
}
int value = list->data[list->last];
for (int i = pos; i < list->last; i++) {
list->data[i] = list->data[i + 1];
}
list->last--;
return value;
}
int main() {
seqlist_t *list = seqlist_create();
seqlist_insert(list, 3);
seqlist_insert(list, 33);
seqlist_insert(list, 22);
seqlist_insert(list, 11);
seqlist_show(list);
seqlist_pos_insert(list, 3, 99);
seqlist_show(list);
seqlist_delete(list);
seqlist_show(list);
seqlist_pos_delete(list, 0);
seqlist_pos_delete(list, 2);
seqlist_show(list);
return 0;
}
输出结果