数据结构第二章:线性表

线性结构的基本特征:

线性结构是一个数据元素的有序(次序)集 1.集合中必存在唯一的一个“第一元素”
2.集合中必存在唯一的一个 “最后元素”
3.除最后元素在外,均有 唯一的后继
4.除第一元素之外,均有 唯一的前驱

一、线性表的基本概念

线性表L是n(n≥0)个具有相同属性的数据元素a1,a2,a3,…,an组成的有限序列,其中序列中元素的个数n称为线性表的长度。

当n=0时称为空表,即不含有任何元素。

常常将非空的线性表(n>0)记作:
(a1,a2,…an)

数据元素 ai(1≦i≦n)只是一个抽象的符号,其具体含义在不同的情况下可以不同。
在这里插入图片描述
非空的线性表的逻辑特征:
有且仅有一个开始结点a1,它没有直接前趋,仅有一个直接后继a2;
有且仅有一个终端结点an,它没有直接后继,仅有一个直接前趋an-1;
其余结点ai(2≦i≦n-1)都有且仅有一个直接前趋ai-1和一个直接后继ai+1。
运算定义在逻辑结构上,而运算的具体实现则是在存储结构上进行的。

二、线性表的类型定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述问题可演绎为对线性表作如下操作:
扩大线性表LA,将存在于线性表LB中而不存在于LA中的数据元素插入到线性表LA中去。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分析:设La=(a1,…,ai,…,an)
Lb= (b1,…,bi,…,bm)
Lc= (c1,…,ck,…,cm+n)
则ck=?,k=1,2,…,m+n
分别从LA,LB中取得当前元素ai和bj;
若ai<= bj,则将ai插入到Lc 中;否则将bj插入到Lc 中。

Void  MergeList(List La,List Lb,List &Lc)
//巳知线性表LA和线性表LB中的数据元素按值非递减排列
//归并LA和LB得到新的线性表LC,LC中的元素仍按值非递减排列。
     InitList(Lc);
     i=j=1;
     k=0;
     La_len=ListLength(La);
     Lb_len=ListLength(Lb);
     while((i<=La_len)&&(j<=Lb_len)){
       
     	GetElem(La,i,ai);
     	GetElem(Lb,j,bj);
     	if(ai<=bj){
   
     		ListInsert(Lc,++k,ai);
            ++i;
        }
      	else{
   
      		ListInsert(Lc,++k,bj);
            ++j;
        }
      }
      while(i<=La_len){
   
          GetElem((La,i++,ai);
          ListInsert(Lc,++k,ai);
       }
      while(j<=Lb_len){
   
          GetElem((Lb,j++,bj);
          ListInsert(Lc,++k,bj);
       }
}

在这里插入图片描述

boolisEqual(List LA, List LB) {
   
 // 若线性表LA和LB不仅长度相等,且所含数据
  // 元素也相同,则返回 TRUE, 否则返回 FALSE
  	La_len = Listlength(LA);
  	Lb_len = Listlength(LB);
  	if ( La_len != Lb_len )
  		return FALSE; // 两表的长度不等
	else 
	{
   
		i = 1;  found = TRUE;
		while (i<= La_len && found ) {
   
			GetElem(LA, i, e);  
			if (LocateElem(LB, e, equal( ))
			    i++;  
			else  found = FALSE; 
		}
		return found; 
	}
}

三、线性表类型的实现——顺序映象

—— 以x的存储位置和y的存储位置之间某种关系表示逻辑关系<x,y>
最简单的一种顺序映象方法是:
令y的存储位置和x的存储位置相邻。
在这里插入图片描述
在这里插入图片描述
在C语言中,可用下述类型定义来描述顺序表:

     #define LIST_INIT_SIZE  100
     #define LISTINCREMENT  10 
     typedef  struct {
   
               ElemType *elem; 
               int      length;   
               int      listsize;
      }sqList;
      sqList   L;               

在实际应用中,需要将ElemType定义成实际类型

1.线性表的初始化操作

顺序表的初始化操作:为顺序表分配一个预定义大小的数组空间,并将线性表的当前长度设为0。

Status InitList_Sq(SqList &L){
     
	L.elem=(<
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值