数据结构--线性表顺序存储

系列文章目录

第一话 数据结构之线性表

文章目录

  • 一、了解什么是线性表
  • 二、线性表的特征
  • 三、线性表的基本操作步骤
    • 1、存储结构
    • 2、基本操作
    • 3、实现运用
  •   四、总结


前言

出门乘作地铁或公交,从起点到终点,相当于一个线性表,其中整个线路上的每一个站点构成了线性表上的每一个数据元素。线性表也是最自由的,其表上任意位置的数据元素都可以操作。

一、什么是线性表?

线性表是最简单、最常用的线性结构,有两端,一个是首端,另一个是尾端,除了首尾,数据元素“一个接一个地排列”,并且元素的类型是相同的。

二、线性表的特征

1.有序性

线性表中相邻数据元素之间存在之序偶关系<ai,ai+1>。

2.有穷性 

线性表由有限个数据元素组成,表长就是表中数据元素的个数。

3.同一性

线性表由相同类型构成,每一个ai必须属于同一数据类型。

三、线性表的基本操作步骤

如下:

1、定义存储结构--顺序存储

#include <stdio.h>
#include <stdlib.h>
#define maxsize 10
typedef int Elemtype;//定义一个整型的数据类型
typedef struct{
    Elemtype date[maxsize];//一、存放数据为数组类型
    int Len;//二\定义长度
}List;
//结构的名称为List

2、将线性表初始化 

List *init_list()
{
    List *L;//创造一个表
    L = (List*)malloc(sizeof(List));//为表申请一块空间
    L->Len = 0;//表最开始的长度为0
    return L;
}

3、将线性表输入数据

void createlist(List *L)
{
    Elemtype x;//要输入的数
    int i=0;
    printf("请输入线性表的数据,输入-1代表结束:\n");
    scanf("%d",&x);
    while(x!=-1){
    L->date[i] = x;//将输入的数据放入表中
    i++;
    L->Len++;//将表的长度增加一格
    scanf("%d",&x);
    }
}

4、 将线性表数据输出

void outlist(List *L)
{
    int i;
    for(i=0;i<L->Len;i++){
    printf("%5d",L->date[i]);//将表中的数据输出来
    }
    printf("\n");
}

5、在主函数中实现调用 

int main(void)
{
    List *L;
    L = init_list();
    createlist(L);
    outlist(L);
    return 0;
}

 

 

6、将线性表插入数据 

void Insert(List *L,int i,Elemtype x)
{
    int j;
    for(j=L->Len;j>=i-1;j--){
        L->date[j] = L->date[j-1];//将数据从前往后挪一位
        }
        L->date[i-1] = x;//将数据插入第i个位置
        L->Len++;//插入之后长度得加1
}
int main(void)
{
    List *L;
    L = init_list();
    createlist(L);
    outlist(L);
    Insert(L,2,10);//在第二个位置插入数据10
    outlist(L);
    return 0;
}

 

7、将线性表删除数据 

void Delete(List *L,int i)
{
    int j;
    for(j=i;j<L->Len;j++){
        L->date[j-1] = L->date[j];//让线性表数据都往前挪一位
        }
        L->Len--;
}
int main(void)
{
    List *L;
    L = init_list();
    createlist(L);
    outlist(L);
    Delete(L,3);//将线性表第三个元素删除
    outlist(L);
    return 0;
}

 四、总结

顺序存储表可以随机存取表中的任一元素,其存储位置可以用一个简单的、直观的公式表示。

另一方面,这个特点也造成了这种存储结构的缺点:在表中插入和删除操作时,需要移动大量元素。由于顺序要求占用连续的存储空间,存储分配只能预先静态分配,当表中数据元素个数较多且变化较大时,操作过程相对复杂,必然导致存储空间的浪费。

对于以上问题,是否有另一种存储结构可以解决呢?

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值