c语言描述的顺序表实现

//顺序表的实现:(分配一段连续地址给顺序表,像数组一样去操作)
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define INCREMENT 10
typedef int ElemType;
typedef struct{
        ElemType *elem;//数组指针代表存储基址
        int length;//当前顺序表长度
        int listsize;//当前已经分配的空间大小
}Sqlist;//顺序表的长度不一定会占满已经分配的空间
static Sqlist L;
static int e;
int Initlist(Sqlist *L){
    int i,length;
    printf("请输入顺序表的长度:
");
    scanf("%d",&length);
    L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L->elem){
        return ERROR;
    }
    printf("输入%d个元素,以空格隔开:
",length);
    for(i=0;i<length;i++){
    scanf("%d",&L->elem[i]);
    }
    L->length=length;
    L->listsize=LIST_INIT_SIZE;
    return OK;
}
void TraverseList(Sqlist *L){
    int i;
    if(!L){
        printf("空表!");
        exit(ERROR);
    }
    for(i=0;i<L->length;i++){
        printf("%d
",L->elem[i]);
    }
}
int ListInsert(Sqlist *L,int e,int m){
    ElemType *newbase;
    ElemType *p,*q;
    if(m<1||m>L->length){
            return ERROR;
    }
    if(L->length>=L->listsize){
        printf("当前空间满了!重新分配内存
");
        newbase=(ElemType *)realloc(L->elem,(L->listsize+INCREMENT)*sizeof(ElemType));
        if(!newbase){
            return ERROR;
        }
        L->elem=newbase;
        L->listsize+=INCREMENT;
    }
    q=&(L->elem[m-1]);
    for(p=&(L->elem[L->length-1]);p>=q;p--){
        *(p+1)=*p;//从后往前依次后移
    }
    *q=e;
    L->length++;
    return OK;
}
int ListDelete(Sqlist *L,int m){
    if(m<1||m>L->length){
        return ERROR;
    }else{
        ElemType *p,*q;
        
        p=&(L->elem[m-1]);
        free(p);
        for(q=&(L->elem[L->length-1]);q>L->elem[m-1];q++){
            *(q-1)=*q;//从后往前依次前移
        }
    }
    return OK;
    
}
int main(){
    int i,n,m;
    if(Initlist(&L)==ERROR){
        printf("创建失败!");
        return ERROR;
    }
    TraverseList(&L);
    printf("输入要插入元素的和要插入的位置 用空格隔开!
");
    scanf("%d%d",&n,&m);
    TraverseList(&L);
    printf("输入要删除的元素位置:
");
    scanf("%d",&n);
    if(!ListDelete(&L,n)){
        printf("删除失败!");
        TraverseList(&L);
    }
    return OK;
}
原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5703548.html