C线性表

来源:互联网 发布:淘宝怎么弄 编辑:程序博客网 时间:2024/05/22 00:36
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 4
typedef int Status;
typedef int ElemType;
typedef struct
{
    ElemType *elem;                     //存储机制
    int length;                         //当前线性表的长度
    int listsize;                       //当前分配的存储容量
}Sqlist;
Status Init_List(Sqlist *L)
{
    L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L->elem) return -2;
    L->length=0;
    L->listsize=LIST_INIT_SIZE;
    printf("初始化成功\n");
    return 1;
}
Status List_Insert(Sqlist *L,int i,ElemType e)
{
    if(i<1||i>L->length+1)
        return -1;
    if(L->length>=L->listsize)
    {
        ElemType *newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase) return -1;
        L->elem=newbase;
        L->listsize+=LISTINCREMENT;
    }
    ElemType *q=&(L->elem[i-1]);
    ElemType *p=&(L->elem[L->length-1]);
    for(;p>=q;--p) *(p+1)=*p;
    *q=e;
    ++L->length;
    printf("插入成功!\n");
    return 1;
}
Status List_Delete(Sqlist *L,int i,ElemType e)
{
    if(i<1||i>L->length)
        return -1;
    ElemType *q=&(L->elem[i-1]);
    e=*q;
    ElemType *p=&(L->elem[L->length-1]);
    for(++q;p>=q;--p) *(p-1)=*p;
    --L->length;
    printf("删除成功!\n");
    return 1;
}
void Print(Sqlist *L)
{
    int i;
    for(i=0;i<L->length;i++)
        printf("%d\n",L->elem[i]);
}
int main()
{
    Sqlist L;
    ElemType e;
    Init_List(&L);
    int i;
    for(i=1;i<10;i++)
    {
        List_Insert(&L,1,i);
    }
    Print(&L);
    List_Delete(&L,1,e);
    return 0;
}