一,线性表(顺序表)


前言

为什么要使用顺序表呢:

        线性表可以方便有序线性序列的组织和管理


一、线性表是什么?

                “线性表(Linear List)”:由同类型数据元素构成有序序列的线性结构

                       1. 表中元素个数称为线性表的长度 

                        2.线性表没有元素时,称为空表

                        3.表起始位置称表头,表结束位置称表尾

二、相关操作(顺序表)

1.线性表的抽象数据类型描述

1、List MakeEmpty():初始化一个空线性表L;

2、ElementType FindKth( int K, List L ):根据位序K,返回相应元素 ;

3、int Find( ElementType X, List L ):在线性表L中查找X的第一次出现位置;

4、void Insert( ElementType X, int i, List L):在位序i前插入一个新元素X;

5、void Delete( int i, List L ):删除指定位序i的元素;

6、int Length( List L ):返回线性表L的长度n 

2.相关操作

1.申请相关变量

          

下表 i01......i-1i.......n-1.......MAXSIZE-1
Dataa1a2......aia(i+1).......an......-----------------

                                                                                                  last

typedef struct LNode *List;
struct LNode{ 
ElementType Data[MAXSIZE]; 
 int Last;
} ;

2. 初始化(建立空的顺序表)

List MakeEmpty( )
{ List PtrL;
 PtrL = (List )malloc( sizeof(struct LNode) );
 PtrL->Last = -1; 
 return PtrL;
}

3. 查找 

int Find( ElementType X, List PtrL )
{ int i = 0;
 while( i <= PtrL->Last && PtrL->Data[i]!= X )
 i++;
 if (i > PtrL->Last) return -1; /* 如果没找到,返回-1 */
 else return i; /* 找到后返回的是存储位置 */ 
}

 4.插入操作实现

void Insert( ElementType X, int i, List PtrL )
{ int j;
 if ( PtrL->Last == MAXSIZE-1 ){ /* 表空间已满,不能插入*/
 printf("表满"); 
 return; 
 } 
 if ( i < 1 || i > PtrL->Last+2) { /*检查插入位置的合法性*/
 printf("位置不合法");
 return; 
 } 
 for ( j = PtrL->Last; j >= i-1; j-- )
 PtrL->Data[j+1] = PtrL->Data[j]; /*将 ai~ an倒序向后移动*/
 PtrL->Data[i-1] = X; /*新元素插入*/
 PtrL->Last++; /*Last仍指向最后元素*/
 return; 
} 

5.删除操作实现

void Delete( int i, List PtrL )
{ int j;
 if( i < 1 || i > PtrL->Last+1 ) { /*检查空表及删除位置的合法性*/
 printf (“不存在第%d个元素”, i ); 
 return ; 
 }
 for ( j = i; j <= PtrL->Last; j++ )
 PtrL->Data[j-1] = PtrL->Data[j]; /*将 ai+1~ an顺序向前移动*/
 PtrL->Last--; /*Last仍指向最后元素*/
 return; 
}


总结

       优点:

                无需为表示表中元素之间的逻辑关系而增加额外的存储空间

               可以快速地存取表中任一位置的元素

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1219忆梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值