C构造线性表

如题

#include<stdio.h>
#include<stdlib.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR -1

#define initsize 4
#define addsize 2

typedef int status;
typedef int ElemType;

typedef struct //结构体构建
{
    ElemType *elem;     //储存空间基址
    int len;         //表的当前长度
    int size;       //当前分配的存储容量
} Line;


status LineInit(Line *L)  //构造一个空的线性表
{
    (*L).elem = (ElemType *)malloc(initsize*sizeof(ElemType));      //根据存储空间基址类型开辟空间
    if((*L).elem==NULL)
        exit (FALSE);       //分配失败
    (*L).len=0;         //空表的长度为0
    (*L).size=initsize;     //初始储存容量
    return OK;
}


status LineInsert(Line *L,int i,ElemType e)    //插入数据
{
    ElemType *newbase;      //开辟新的空间
    ElemType *p;        //定义指针
    int j;
    if(i<1 || i>(*L).len+1)
        return FALSE;
    if((*L).len == (*L).size)//线性表满
    {
        newbase=(ElemType *)realloc((*L).elem,((*L).size+addsize)*sizeof(ElemType));        //开辟新空间
        if(!newbase)
            exit (FALSE);       //开辟失败,退出
        (*L).elem=newbase;      //指针指向新开辟的空间
        (*L).size=(*L).size+addsize;
    }
    //插入数据
    p=(*L).elem;
    for(j=0; j<(*L).len-i+1; j++)
        *(p+(*L).len-j)=*(p+(*L).len-j-1);
    *((*L).elem+i-1)=e;
    (*L).len++;
    return OK;
}


status LineDelete(Line *L,int i,ElemType *e)//删除数据
{
    int j;
    if(i<1 || i>(*L).len)
        return FALSE;
    *e=*((*L).elem+i-1);
    for(j=0; j<(*L).len-i; j++)
        *((*L).elem+i-1+j)=*((*L).elem+i+j);
    (*L).len--;
    return OK;
}


status LineDisplay(Line L)  //展示表中原有的数据
{
    int i;
    for(i=0; i<L.len; i++)
    {
        printf("%5d",*(L.elem+i));
    }
    printf("\n");
    return OK;
}


status LineLenth(Line L)   //返回当前表长
{
    return L.len;
}


status LineEmpty(Line *L)       //清空列表
{
    (*L).len=0;
    return OK;
}


status LineDestory(Line *L)         //释放内存
{
    free((*L).elem);
    (*L).elem=NULL;
    (*L).len=0;
    (*L).size=0;
    return OK;
}


status ElemGet(Line L,int i,ElemType *e)        //获取新的元素
{
    if(i<1 || i>L.len)
        return FALSE;
    *e=*(L.elem+i-1);
    return OK;
}


int main()
{
    Line L;
    ElemType i,e;
    LineInit(&L);  //初始化
    for(i=0; i<initsize+5; i++) //插入一些测试数据
       {
        LineInsert(&L,1,i);
       }
    printf("current number is\n");
    LineDisplay(L);//显示线性表的内容
    LineDelete(&L,2,&e);//删除其中一个数据
    printf("after delete No.2\n");
    LineDisplay(L);//显示线性表的内容
    ElemGet(L,3,&e);//获取其中一个数据
    printf("ElemGet No.3 is %d\n",e);
    LineInsert(&L,5,34);//再次插入测试数据
    printf("after add No.5\n");
    LineDisplay(L);
    LineEmpty(&L);//清空线性表的内容
    LineDestory(&L);//销毁这个线性表
    return 0;
}
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值