加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 06:06:07 所属栏目:安全 来源:网络整理
导读:【定义】线性表的顺序存储结构是指用一段地址连续的存储单元(就是数组)依次存储线性表的数据元素 【线性表的顺序存储结构代码】 #define MAXSIZE 50typedef int ElemType;typedef int Status;struct list{ int Elem[MAXSIZE]; int length;//这个长度是用过

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

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

#define MAXSIZE 50
typedef 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,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("当前链表长度为%dn",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("errorn");
                exit(0);
            }
            getLlength(&L);
            break;
        case 2:
            printf("输入位置n");
            scanf("%d",&i);

            if(ListDelete(&L,i) == 0)
            {
                printf("errorn");
                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,&e) == 0)
            {
                printf("errorn");
                exit(0);
            }
            printf("当前的元素的为%dn",e);
            break;
        }
    }
    return 0;
}
【线性表的顺序存储结构的优缺点】

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读