#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];   /* 存放数据元素 */
    int length;               /* 线性表长度 */
} SqList;

/* 初始化 */
void InitList(SqList *L) { L->length = 0; }

/* 在位置i(1≤i≤n+1)插入元素e */
int ListInsert(SqList *L, int i, ElemType e) {
    int j;
    if (i < 1 || i > L->length + 1 || L->length >= MaxSize) return 0;
    for (j = L->length; j >= i; j--) L->data[j] = L->data[j-1];
    L->data[i-1] = e; L->length++; return 1;
}

/* 删除位置i的元素并由e返回 */
int ListDelete(SqList *L, int i, ElemType *e) {
    int j;
    if (i < 1 || i > L->length) return 0;
    *e = L->data[i-1];
    for (j = i; j < L->length; j++) L->data[j-1] = L->data[j];
    L->length--; return 1;
}

/* 按位取值 */
int GetElem(SqList L, int i, ElemType *e) {
    if (i < 1 || i > L.length) return 0;
    *e = L.data[i-1]; return 1;
}

/* 按值查找，返回其逻辑位置 */
int LocateElem(SqList L, ElemType e) {
    int i;
    for (i = 0; i < L.length; i++)
        if (L.data[i] == e) return i + 1;
    return 0;
}

/* 遍历输出 */
void DispList(SqList L) {
    int i;
    for (i = 0; i < L.length; i++) printf("%d ", L.data[i]);
    printf("\n");
}

int main() {
    SqList L; ElemType e;
    int a[] = {1, 2, 3, 4, 5}, i;
    InitList(&L);
    for (i = 0; i < 5; i++) ListInsert(&L, i+1, a[i]);
    printf("初始顺序表:  "); DispList(L);
    ListInsert(&L, 3, 100);
    printf("在位置3插入100后: "); DispList(L);
    ListDelete(&L, 3, &e);
    printf("删除第3个元素(%d)后: ", e); DispList(L);
    GetElem(L, 2, &e); printf("第2个元素=%d\n", e);
    printf("元素3的位置=%d\n", LocateElem(L, 3));
    return 0;
}
