大话数据结构(五)(java程序)——顺序存储结构的插入与删除
获得元素操作
对于线性表的顺序存储结构来说,我们要实现getElement操作,即将线性表的第i个位置元素返回即可
插入操作
插入算法思路:
1、如果插入位置不合理,抛出异常
2、如果插入表的长度大于等于数组长度,则抛出异常或动态增容
3、从最后一位元素开始向前遍历到第i个位置,分别把它们都向后移动一个位置
4、将要插入元素填入位置i处
5、表长度加1
删除操作
1、如果删除位置不合理,抛出异常
2、取出插入元素
3、从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一位
4、表长度减一
public interface List {
public Object getElement(int index) throws Exception;
public void doInsert(Object obj,int index) throws Exception;
public void doDelete(int index) throws Exception;
}
public class SequenceList implements List{
static final int DEFUALTLENTH=10;
int maxSize;//最大数组长度
int size;//当前长度
Object[] list;//对象数组
//顺序表初始化方法
public void init(int size1){
maxSize = size1;//这个表的长度为size1
list = new Object[size1];
}
//无参构造方法
public SequenceList() {
init(DEFUALTLENTH);
}
//有参构造方法
public SequenceList(int size2){
init(size2);
}
@Override
public Object getElement(int index) throws Exception {
if(size==0 || index<0 || index>=size){
System.out.println("参数不正确");
}
if(size == maxSize){
System.out.println("");
}
return list[index];
}
@Override
public void doInsert(Object obj,int index) throws Exception {
if(index<0 || index>size+1){
System.out.println("参数错误");
}
if(size == maxSize){
System.out.println("线性表已满,无法插入");
}
for(int i=size-1;i>index-1;i--){
list[i+1]=list[i];//指定位置之后的元素都后移一位
}
list[index] = obj;
size++;
}
@Override
public void doDelete(int index) throws Exception {
if(index<0||index>=size){
System.out.println("参数错误");
}
if(index<size){
for(int i=size-1;i>index;i--){
list[i-1] = list[i];
}
}
size--;
}
}
public class ListTest {
public static void main(String args[]){
SequenceList seq = new SequenceList(20);
try {
seq.doInsert("aa", 1);
seq.doInsert("bb", 2);
seq.doInsert("cc", 3);
for(int j=0;j<seq.size;j++){
System.out.println(seq.getElement(j));}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class StudentList {
public static void main(String args[]){
SequenceList seqList = new SequenceList(30);
try {
seqList.doInsert(new Student(1,"小米","女",23), seqList.size);//每次插入,都在表的最后一位插入
seqList.doInsert(new Student(2, "小徐", "男", 22), seqList.size);
for(int i=0;i<seqList.size;i++){
System.out.println("第"+(i+1)+"学生信息为:"+seqList.getElement(i).toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Student{
private int id;
private String name;
private String gender;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "student [id=" + id + ", name=" + name + ", gender=" + gender
+ ", age=" + age + "]";
}
public Student(int sid,String name,String gender,int age){
this.id = sid;
this.name = name;
this.gender = gender;
this.age = age;
}
}
大话数据结构(五)(java程序)——顺序存储结构的插入与删除的更多相关文章
- Java程序的结构和执行
目录 Java程序的结构 Java程序的执行 source code -- compiler -- class file -- JVM compiler JVM Java语法 数据类型 数据的存储 堆 ...
- 004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构
004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构 Java程序的结构 Java程序外层--类 程序外层,如下面的代码,是一个类的定义. c ...
- java基础 三 概念和java程序的结构.
一.java的一些概念: JRE(java runtime environment):java程序运行环境,如果要运行java程序,需要jre支持.jre里包含jvm JDK(java devel ...
- java资料——顺序存储结构和链式存储结构(转)
顺序存储结构 主要优点 节省存储空间,随机存取表中元素 缺 点 插入和删除操作需要移动元素 在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构. 顺序存储结 ...
- Java程序基本结构
/** * 可以用来自动创建文档的注释 */ public class Hello { public static void main(String[] args) { // 向屏幕输出文本: Sys ...
- c数据结构 -- 线性表之 顺序存储结构 于 链式存储结构 (单链表)
线性表 定义:线性表是具有相同特性的数据元素的一个有限序列 类型: 1:顺序存储结构 定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构 算法: #include <stdio. ...
- Java 集合与队列的插入、删除在并发下的性能比较
这两天在写一个java多线程的爬虫,以广度优先爬取网页,设置两个缓存: 一个保存已经访问过的URL:vistedUrls 一个保存没有访问过的URL:unVistedUrls 需要爬取的数据量不大,对 ...
- C 线性表的顺序存储实现及插入、删除等操作示例
一.线性表的定义 线性表(Linear List)是由同一类型元素构成的有序序列的线性结构.线性表中元素的个数称为线性表的长度:线性表内没有元素(长度为0)时,称为空表:表的起始位置称为表头,表的结束 ...
- 二叉搜索树Java实现(查找、插入、删除、遍历)
由于最近想要阅读下 JDK1.8 中 HashMap 的具体实现,但是由于 HashMap 的实现中用到了红黑树,所以我觉得有必要先复习下红黑树的相关知识,所以写下这篇随笔备忘,有不对的地方请指出- ...
随机推荐
- 网页中meta标记
网页中常常看见有这样的标记,他们是清浏览器缓存用的 <meta http-equiv="> PS:清除浏览器中的缓存,它和其它几句合起来用,就可以使你再次进入曾经访问过的页 ...
- Android Studio打包未签名包
Android Studio打包未签名包 好久没有写技术博客了,真有点懈怠了,作为35岁的程序员,转行重新捡起这些知识,还是挺犹豫纠结的,不过没啥其它办法,一点一滴开始吧,今天这开篇就小结点前几天工作 ...
- Codeforces Round #267 (Div. 2) C. George and Job DP
C. George and Job The new ITone 6 has been released ...
- ASP.NET获取客户端IP/用户名等信息
1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostN ...
- JVM的粗略简述
什么是Java虚拟机 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.JVM屏蔽了与 ...
- 递推DP URAL 1167 Bicolored Horses
题目传送门 题意:k个马棚,n条马,黑马1, 白马0,每个马棚unhappy指数:黑马数*白马数,问最小的unhappy值是多少分析:dp[i][j] 表示第i个马棚放j只马的最小unhappy值,状 ...
- List.Sort以及快速排序ZZ
经常看到有人因为使用.net中的集合类处理海量数据时性能不够理想,就武断的得出.net不行,c#也不行这样的结论.对于.net framework这样的类库来说,除了性能以外,通用性和安全性同样重要, ...
- Flo's Restaurant[HDU1103]
Flo's Restaurant Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- js中等性操作符(==)、关系操作符(<,>)和布尔操作符(!)比较规则
最近一直在笔试面试,经常碰到例如 123=='123'.'abc'==true等问题,其中有答对的,也有答错的,主要原因还是对ECMAScript的规范没有理解清楚,很多题目没有具体分析所导致.现查阅 ...
- UOJ#61. 【UR #5】怎样更有力气
大力水手问禅师:“大师,很多事情都需要用很大力气才能完成,而我在吃了菠菜之后力气很大,于是就导致我现在非常依赖菠菜.我很讨厌我的现状,有没有办法少吃点菠菜甚至不吃菠菜却仍很有力气?” 禅师浅笑,答:“ ...