【计算机】数据结构-严蔚敏/清华大学P4

【计算机】数据结构-严蔚敏/清华大学P4

第二章 线性表

顺序映像的C语言描述

#define LIST_INIT_SIZE 80
          //线性表存储空间的初始分配量
#define LISTINCREMENT 10
          //线性表存储空间的分配增量
typedef struct {
  ElemType *elem;//存储空间基址
  int length;//当前长度
  int listsize;//当前分配的存储容量
               //(以sizeof(ElemType)为单位)
} SqList;//俗称顺序表

线性表的初始化操作

Status InitList_Sq( SqList& L ){
  //构造一个空的线性表
  L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
  if(!L.elem) exit(OVERFLOW);
  L.length = 0;
  L.listsize = LIST_INIT_SIZE;
  return OK;
} //InitList_Sq

线性表操作
  LocateElem(L,e,compare())的实现:

int LocateElem_Sq(SqList L,ElemType e){
  Status(*compare)(ElemType,ElemType)){
    i = 1;  //i的初值为第1元素的位序
    p = L.elem;//p的初值为第1元素的存储位置
    while(i<=L.length && !(*compare)(*p++,e)){
      ++i;
      if(i<=L.length) return i;
      else return 0;
    }
  }
}//LocateElem_Sq

线性表操作
  ListInsert(&L,i,e)的实现:
问:插入元素时,线性表的逻辑结构发生什么变化?
(a₁,...,aᵢ₋₁,aᵢ,...,aₙ)改变为
          (a₁,...,aᵢ₋₁,e,aᵢ,...,aₙ)

a₁a₂...aᵢ₋₁aᵢ...aₙ
a₁a₂...aᵢ₋₁eaᵢ...aₙ

求算法的时间复杂度为:O(ListLength(L)),和表长一样。

考虑平均的情况:

线性表操作
    Listelete(&L,i,&e)的实现:
问:删除元素时,
    线性表的逻辑结构发生什么变化?
(a₁,...,aᵢ₋₁,aᵢ,aᵢ₊₁,...,aₙ)改变为
          (a₁,...,aᵢ₋₁,aᵢ₊₁,...,aₙ)

a₁a₂...aᵢ₋₁aᵢaᵢ₊₁...aₙ
a₁a₂...aᵢ₋₁aᵢ₊₁...aₙ

此算法的时间复杂度为:O(ListLength(L)),和表长一样。

考虑平均的情况:

2.3线性表类型的实现

     --链式映象

一、单链表

  用一组地址任意的存储单元存放线性表中的数据元素
  以元素(数据元素的映像)
      +指针(指示后继元素存储位置的)
  =结点(表示数据元素)
  以"结点的序列"表示线性表-----称作链表

以线性表中第一个数据元素 a₁ 的存储地址作为线性表的地址,称作线性表的头指针

二、结点和单链表的C语言描述

Typedef struct LNode {
  ElemType data;//数据域
  struct Lnode *next;//指针域
} LNode,*LinkList;

线性表的操作GetElem(L,i,&e)
在链表中的实现:
基本操作为:使指针p始终指向线性表中第j个数据元素

算法的时间复杂度为:O(ListLength(L))

线性表的操作ListInsert(L,i,&e)
在链表中的实现:
基本操作为:找到线性表中第i-1个结点,修改其指向后继的指针
有序对<aᵢ₋₁,aᵢ>改变为<aᵢ₋₁,e>和<e,aᵢ>

算法的时间复杂度为:O(ListLength(L))

线性表的操作ListDelete(L,i,&e)
在链表中的实现:
基本操作为:找到线性表中第i-1个结点,修改其指向后继的指针
有序对<aᵢ₋₁,aᵢ>和<aᵢ,aᵢ₊₁>改变为<aᵢ₋₁,aᵢ₊₁>

-----------------END----------------- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dnbug Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值