C构造线性表

来源:互联网 发布:iphone神器软件 编辑:程序博客网 时间:2024/05/01 15:14

如题

#include<stdio.h>#include<stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR -1#define initsize 4#define addsize 2typedef 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;}
原创粉丝点击