• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Foreordination
酒后高歌磨剑,梦中快意恩仇,名利脚下踩,情义两肩挑
博客园    首页    新随笔    联系   管理    订阅  订阅
一、表

一、ADT表

  线性表是一种非常灵活的结果,可以根据需要改变表的长度,也可以在任何位置对元素进行访问,插入或者删除操作.另外,还可以将多个表连接成一个表,或者把一个表拆分成多个表

1、ADT表定义

线性表List是n个相同类型数据元素a1,a2,...an构成的有限序列.表示成List=(a1,a2...,an)

2、表长

线性表中元素的个数,n=0时为空表

3、表的前驱和后继

线性表的ai领先于ai+1,则ai+1是ai的后继,ai-1是ai的前驱。

4、抽象数据类型List

5、线性表的基本运算

  5.1、ListEmpty(L):测试表L是否唯恐

  5.2、ListLength(L):表L的长度

  5.3、ListLocate(x,L):元素x在表L中的位置,若x在表中重复出现多次,则返回最前面的x位置

  5.4、ListRetrieve(k,L):返回表L的位置k处的位置的元素。表中没有位置k时,该运算无意义

  5.5、ListInsert(k,x,L):在表L的位置k之后插入元素x,并将原来占据该位置的元素及其后面的元素依次后移一个位置,如果表中没有位置k,则运算无意义。

  5.6、ListDelete(k,L):从表L中删除位置k处的元素,并返回该位置删除的元素。表中没有这个位置k时,运算无意义。

  5.7、PrintList(L):将表L中所有的元素按位置的先后顺序先后输出。

6、用数组实现表

  6.1、顺序表:一组地址连续的存储单元(数组)存放一个线性表叫顺序表

  6.2、元素地址计算:location(ai)=location(a0)+i*num  location(a+i)=location(ai)+num

  注:num是一个元素占用的存储单元个数,location(ai):表示第i个元素的地址。

  6.3、顺序表的特点:实现逻辑上的相邻(物理地址相邻)  实现随机存取

  6.4、结构的定义:

//数据元素不是简单类型时,可以定义结构体数组
#define maxsize 1000
int data[maxsize];
typedef struct test
{
    int num;
    char name[20];
    char author[10];
    char publisher[30];
    float price;
}card;
card library[maxsize];

  6.4、用数组实现的ADT表的类型

  用数组实现表时,为了适应表的元素类型,将表类型List定义为一个结构体

typedef struct alist *List;//定义alist的含义
typedef struct alist{
    int n;//表长度,n=0,表为空
    int maxsize;//线性表的最大长度
    ListItem *table;//表元素数组
}Alist;

顺序表List的基本运算实现:

1、初始化函数:分配大小为size的空间给表数组table,并返回初始化为空的表

 

posted on 2018-03-15 21:44  Foreordination  阅读(210)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3