当前位置:   article > 正文

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

线性表的顺序存储

系列文章目录

第一话 数据结构之线性表

文章目录

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


前言

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

一、什么是线性表?

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

二、线性表的特征

1.有序性

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

2.有穷性 

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

3.同一性

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

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

如下:

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

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

2、将线性表初始化 

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

3、将线性表输入数据

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

4、 将线性表数据输出

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

5、在主函数中实现调用 

  1. int main(void)
  2. {
  3. List *L;
  4. L = init_list();
  5. createlist(L);
  6. outlist(L);
  7. return 0;
  8. }

 

 

6、将线性表插入数据 

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

 

7、将线性表删除数据 

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

 四、总结

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/700682
推荐阅读
相关标签
  

闽ICP备14008679号