数据结构基础(一)线性表详解

本文通过约瑟夫环的故事引入了线性表的概念,详细解释了线性表的定义、特点及其抽象数据结构,帮助读者理解线性表的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,约瑟夫环

1.据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决。Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
该问题可以引导我们对线性表的理解

二.线性表

1.线性表的定义:
线性表(linear list)是由n(n≧0)个相同类型的数据元素(结点)a1,a2, …an组成的有限序列。一个有n个数据元素的线性表常常表示为(a1,a2,…an)
其中:

  1. n:数据元素的个数,也称表的长度
  2. 空表:n=0,记为()

2.线性表的特点:

  1. 有且仅有一个节点a1,没有直接前驱,有且仅有一个直接后驱a2
  2. 有且仅有一个节点an,没有直接后驱,有且仅有一个直接前驱an-1
  3. 除第一个节点外,其他节点都有一个直接前驱和一个直接后驱

3.线性表的抽象数据结构:
ADT 线性表(linearlist)
数据元素 可以是任意类型,只要同属一个数据对象即可;
数据关系 数据元素之间呈线性关系,假设线性表中有n个元素(a1, a2,a3,…,an),则对每一个元素ai(i=1,2,…,n-1)都存在关系(ai,ai+1),并且a1无前趋,an无后继。数据操作 将对线性表的基本操作定义在接口ILinarList中,代码如下:

public interface ILinarList<E> {
boolean add(E item); //添加元素
boolean add(int index, E item);//插入元素
E remove(int index); //删除元素
int indexOf(E item); //定位元素
E get(int index); //取表元素
E set(int index,E item);//替换元素
int size(); //求线性表长度
void clear();//清空线性表
boolean isEmpty(); //判断线性表是否为空
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值