数据结构——“线性表“ 排队点餐的初代结构模型你了解吗

线性表是一种逻辑结构,表示元素间一对一的相邻关系,常用于排队场景。本文介绍了线性表的概念、定义、表示方法和特征,并详细讲解了顺序存储结构,包括顺序表的创建、插入和删除操作,以及在C语言中的实现。此外,还探讨了线性表的合并和去重运算。
摘要由CSDN通过智能技术生成

线性表概念

在这里插入图片描述
线性表如排也比较常见啊,就经常咱们排的队啊,就是一个线性表,比如说你上医院去挂号,然后大家都会很自觉的排成一溜长队。那这个排的队列啊就是一个线性表。

那我在队列中如何确定自己当前的位置呢?
有人会说我可以从头开始数,看自己是第几个,这是没有问题的,但是如果说你前面的人发生变化的时候,那这个方法就不是那么可靠了。

那还有没有更简单的方法呢?
其实咱们真正在排队的时候,是不是说记住自己的前面一个人,记住后面的一个人,那不管队列怎么变,那我当前的位置都是固定的。

还有就是在清点这个队伍的时候,那最简单的方法是什么呢?
其实就是让每个人去看看自己的前面的人和后面的人是否还在。那整个队列的话就是完整的。

那这种方法依赖于什么?
依赖于咱们在排队过程中人与人之间产生的 这种一对一的关系,在数据结构中这种逻辑关系就叫做线性表

线性表的定义:

线性表就是0个或多个相同数据元素的有限序列

线性表的表示方法:

线性表记为: L=(A0 ,·······Ai-1 , Ai+1 ,····· An-1)

  • 其中:L 为表名,Ai (0到n-1) 为数据元素 n为表长,
  • n>0 时,线性表L为非空表,否则为空表,记为Φ
  • 二元组形式描述为:L=(D,R) D数据集合,R关系集合

假设有一个顺序表L={1,2,3,4,5,6};他们的关系图:
在这里插入图片描述
1是2的直接前驱,3是2的直接后继

二元组描述 L=(D,R)

   D = {
   1,2,3,4,5,6} (n=6)  //长度为6
   R = {
   <1,2>,<2,3>,<3,4>,<4,5>,<5,6>}

线性表的特征:

  1. 对非空表,A0是表头,无前驱;
  2. An-1是表尾,无后继;
  3. 其他的每个元素A1有且仅有一个直接前驱(Ai-1)和一个直接后继(Ai+1);

线性表:
A1是唯一的 “第一个” 元素, 称“表头元素” An 唯一最后一个元素,称“表尾元素
每个元素有且仅有一个“前驱 除最后一个元素外,每个元素有且仅有一个接直后继
线性表是一种逻辑结构,表示元素之间一对一的相邻关系
顺序表和链表是指存储结构.

线性表的基本操作

  1. 建立一个空表Create List(L);
  2. 置空表ClearList(L);
  3. 判断表空EmptyList(L); (若表为空,返回值为True(或1),否则返回False(或0))
  4. 求表长Length(L); (返回线性表L的长度,即L中数据元素的个数)
  5. 取表中元素(按位查找)GetList(L,i); 要求0 <= i <= length(L)-1(获取表中第i位置元素的值)
  6. 定位运算(按值查找)Locate(L,x); 确定元素x在表L中的位置(或序号)(如果查找存在线性表中,返回i序号,不存在返回-1)
  7. 插入操作Insert(L,x,i); (在将元素x插入到表中第i个元素Ai之前,且表长+1,i=n 时,插入表尾)
  8. 删除操作: Delete(L,i); (删除表L中第i个元素Ai,且表长减1,要求0 <= i <= n-1)

什么时候用“传入参数”的引用“&”:对参数修改结果需要“带回”

线性表的合并运算

设线性表La=(a0 a1,………,a),Lb=(b0 b1,……b),求La U Lb => La,如图所示。
在这里插入图片描述

算法思路:
依次取表Lb中的bi (i=0,1,…n-1),若bi不属于La,则将其插入表La中

算法描述:

void Union(list La, list Lb) 
{
   
    int i, k; data_t x; 
    for (i=0; i<Length(Lb); i++)
    {
    
         x=GetList(Lb,i); 
         k=Locate(La ; x);
         if(k==-1){
   
               Insert(La,x,Length(La));
         }
   }
}

线性表去重运算

:清除线性表L=(a0 a1,····, ai ,····,an-1)中重复元素的算法

算法思路:
对当前表L中的每个ai (0 ≤ i ≤ n-2),依次与aj (i+1 ≤ j ≤ n-1)比较,若与ai 相等,则删除。

算法描述:

void Purge(list L)
{
    
     int i=O,j; 
     data_t x,y; // 初始:L=(1,3,1,5,3,5,7) 
      while(i < Length(L)-1){
    
            x=GetList(L,i); 
            j=i+1;
            while (j<Length(L))
            {
    
                  y=GetList(L,j);
                  if(y == x) Delete(L,j); else j++; 
             }
                   i++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值