【数据结构】顺序存储结构线性表C语言版

来源:互联网 发布:cg软件作用 编辑:程序博客网 时间:2024/05/16 06:26

【定义】线性表的顺序存储结构是指用一段地址连续的存储单元(就是数组)依次存储线性表的数据元素

【线性表的顺序存储结构代码】

#define MAXSIZE 50typedef int ElemType;typedef int Status;struct list{    int Elem[MAXSIZE];    int length;//这个长度是用过的数组的长度,也就是线性表的长度,区分数组的长度MAXSIZE};typedef struct list List;
一个这样的线性表的就是一个包含了数组和int类型的线性表长度的结构体,其中length值是一个从1到MAXSIZE的值,这个值会随着线性表的插入和删除而变化

【线性表的操作的函数代码】

/***返回值为是否成功**/Status GetElem(List *L,int i, ElemType *e){    if(L->length <0||i < 0 || i > L->length)    {        return ERROR;//判断线性表是否存在,要查找的元素是否数组越界    }    *e = L->Elem[i-1];    return OK;}/**在第i个位置之前上插入相应值,同时链表长度增加,这个插入不是将值替换*/Status Listinsert(List *L,int i,ElemType e)//链表,位置,{    int k = L->length;//临时变量用来存放数组下标    if(L->length == MAXSIZE) //判断表是否是满的    {        return ERROR;    }    if(i<0||i>L->length+1) //判断插入位置是否合理    {        return ERROR;    }    if(i>0||i<=L->length)//插入的地方不是表尾    {        for(k=L->length-1 ; k >=i-1; k--)        {            L->Elem[k+1] = L->Elem[k];        }    }    L->Elem[i-1]= e;//恰好是表尾的话就直接插入到这位置    L->length++;    return OK;}Status ListDelete(List *L,int i){    int k;    if(L->length == 0||i<0 ||i>L->length)//空表,删除位置是否合适的判断        return ERROR;    for(k=i-1; k<L->length-1; k++)    {        L->Elem[k] = L->Elem[k+1];    }    L->length--;    return OK;}void getLlength(List *L){    printf("当前链表长度为%d\n",L->length);}
【测试用的主函数的代码】

int main(){    List L = {{0},0};    int choose ;    int i;    int e;    int j;    while(1)    {        printf("***************************************************\n");        printf("输入操作\n");        printf("1.插入元素\n");        printf("2.删除元素\n");        printf("3.获取当前表长\n");        printf("4.显示所有的元素值\n");        printf("5.显示某位置的元素值\n");        printf("***************************************************\n");        scanf("%d",&choose);        switch(choose)        {        case 1:            printf("输入元素值和位置\n");            scanf("%d %d",&e,&i);            if(Listinsert(&L,i,e) == 0)            {                printf("error\n");                exit(0);            }            getLlength(&L);            break;        case 2:            printf("输入位置\n");            scanf("%d",&i);            if(ListDelete(&L,i) == 0)            {                printf("error\n");                exit(0);            }            getLlength(&L);            break;        case 3:            getLlength(&L);            break;        case 4:            for(j = 0; j< L.length; j++)            {                printf("%d   ",L.Elem[j]);            }            printf("\n  ");            break;        case 5:            printf("输入元素位置\n");            scanf("%d",&i);            if(GetElem(&L,i,&e) == 0)            {                printf("error\n");                exit(0);            }            printf("当前的元素的为%d\n",e);            break;        }    }    return 0;}
【线性表的顺序存储结构的优缺点】

优点: 无须为表示表中的元素之间的逻辑关系而增加额外的存储空间,可以快速的存取表中的任意位置的元素

缺点:插入和删除操作需要移动大量的元素,线性表的长度变化较大的时候难以确定存储空间的容量,造成存储空间的“碎片”
【工程源码下载链接】

http://download.csdn.net/detail/u013583717/7999421



0 0
原创粉丝点击