为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数据结构实验一线性表的顺序存储结构

2020-03-09 12页 doc 28KB 5阅读

用户头像

is_037433

暂无简介

举报
数据结构实验一线性表的顺序存储结构实验一线性表的顺序存储结构 一.实验的目的要求: 1.掌握顺序存储结构的特点。 2.掌握顺序存储结构的常见算法。 二.实验内容: 1.建立一个接口,定义一些常用的基本方法; 2.用类实现该接口的基本方法: a.依次插入数据元素,建立顺序表; b.按指定位置查找在该顺序表中查找某一元素; c.按指定位置删除该顺序表中的某一元素; d.实现该顺序表的遍历; 3.定义客户类来调用接口中的方法; 三.实验程序 1.实验分析:线性表的顺序存储结构可以通过插入、删除、替换、查找等方法实现随机存取。其优点在于:数...
数据结构实验一线性表的顺序存储结构
实验一线性表的顺序存储结构 一.实验的目的要求: 1.掌握顺序存储结构的特点。 2.掌握顺序存储结构的常见算法。 二.实验内容: 1.建立一个接口,定义一些常用的基本方法; 2.用类实现该接口的基本方法: a.依次插入数据元素,建立顺序表; b.按指定位置查找在该顺序表中查找某一元素; c.按指定位置删除该顺序表中的某一元素; d.实现该顺序表的遍历; 3.定义客户类来调用接口中的方法; 三.实验程序 1.实验:线性表的顺序存储结构可以通过插入、删除、替换、查找等方法实现随机存取。其优点在于:数据之间逻辑相邻,物理相邻,可随机存储任一数据元素,存储空间较紧凑。但是其缺点在于:每次插入或者删除数据元素都需要移动大量数据,且顺序存储结构需要事先分配好内存空间,有可能不需要那么多内存空间而造成内存空间损失,也有可能内存空间分配不够,造成数据缺失。 2.数据结构:利用线性表的顺序存储结构可以实现数据之间逻辑相邻,物理相邻,可随机存储任一数据,存储空间较紧凑。 3.算法设计: a.插入元素时,先判断表是否已满,若未满则最后一个元素往后一个位置,其他元素也依次向后移动一个位置,然后找到那个空位赋值为所要插入的元素,最后表的长度加一。 b.删除元素时,先找到所要删除元素的位置,然后后一位的元素往前覆盖,后面的元素也依次往前移动一位,最后表的长度减一。 c.替换元素时,先找到需要替换的元素的位置,然后将所要替换的元素赋值给该元素,表的长度不变。 d.查找是否包含元素时,将该元素从表头开始依次与表中的元素做对比。 4.程序运行实例: public class ClientList { public static void main(String[] args) { testList(); } public static void testList() { ListInterface runnerList=new Alist(); runnerList.add("16"); runnerList.add("4"); runnerList.add("33"); runnerList.add("27"); runnerList.replace(3,5); //runnerList.clear(); //runnerList.contains(5); runnerList.display(); } } 5.实习:线性表是一个抽象数据类型(ADT),由同种类型的数据有序排列构成,客户只能通过ADT线性表上定义的操作来修改或者访问数据元素。线性表上的方法对客户是不可见的,因为ADT线性表将数据和操作封装起来,客户可以使用它,但不需要知道实现的细节,即不需要知道ADT线性表做了什么。通过线性表的顺序存储可以实现对数据的随机存取,但是每次插入或者删除数据元素都需要移动大量数据,且顺序存储结构需要事先分配好内存空间,有可能不需要那么多内存空间而造成内存空间损失,也有可能内存空间分配不够,造成数据缺失。 6.源程序: a.线性表接口 public interface ListInterface { public boolean add(T newEntry); //往线性表的末尾插入新元素 public boolean add(int newPosition,T newEntry); //将newEntry插入到线性表中位置newPosition public T remove(int givenPosition); //从线性表中删除指定位置为givenPosition的元素 public void clear(); //删除表中所有元素 public boolean replace(int givenPosition,T newEntry); //以newEntry替换位置为givenPosition的元素 public T getEntry(int givenPosition); //检索线性表中位置为givenPosition的元素 public boolean contains(T anEntry); //确定线性表是否含有一个给定的元素anEntry public int getLength(); //获得线性表中当前包含的元素个数 public boolean isEmpty(); //确定线性表是否为空 public boolean isFull(); //确定线性表是否为满 public void display(); //按照元素在线性表中的顺序显示线性表中的所有元素,每行一个元素 } b.实现类 public class Alist implements ListInterface{ private T[] entry; private int length; private static final int MAX_SIZE=50; public Alist() { this(MAX_SIZE); } public Alist(int maxSize) { length=0; entry=(T[])new Object[maxSize]; } public boolean add(T newEntry) { boolean isSuccessful=true; if(!isFull()) { entry[length]=newEntry; length++; } else isSuccessful=false; return isSuccessful; } public boolean add(int newPosition, T newEntry) { boolean isSuccessful=true; if(!isFull()&&(newPosition>=1)&&(newPosition<=length+1)) { makeRoom(newPosition); entry[newPosition-1]=newEntry; length++; } else isSuccessful=false; return isSuccessful; } private void makeRoom(int newPosition) { f or(int index=length;index>=newPosition;index--) entry[index]=entry[index-1]; } public T remove(int givenPosition) { T result=null; if((givenPosition>=1)&&(givenPosition<=length)) { assert !isEmpty(); result=entry[givenPosition-1]; if(givenPosition=1)&&(givenPosition0;index--) remove(index); } public boolean replace(int givenPosition,T newEntry) { boolean isSuccessful=true; if((givenPosition>=1)&&(givenPosition<=length)) entry[givenPosition-1]=newEntry; else isSuccessful=false; return isSuccessful; } public T getEntry(int givenPosition) { T result=null; if((givenPosition>=1)&&(givenPosition<=length)) { assert !isEmpty(); result=entry[givenPosition-1]; } return result; } public boolean contains(T anEntry) { boolean found=false; for(int index=0;!found&&(index
/
本文档为【数据结构实验一线性表的顺序存储结构】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索