`

用接口实现队列的末尾和指定位置的插入,删除,指定位置元素查询

阅读更多

/**
 * 定义一个接口类(定义数组的增加,删除,按下标查询,返回队列长度)的方法
  */
package 队列增删改查;

public interface IFunction {
    //向队列中加入一个元素
 public void add(String s) ;
  
 //删除数组中指定下标的元素
 public void delete(int index);
 
 //将元素插入到指定的位置
 public void insert(String s,int index);
 
 //获取队列中指定的下标的元素
 public String get(int index);
 
 //得到队列的长度
 public int size();
}

/*
 * 实现接口中的方法
 */
package 队列增删改查;

public class FunctionTest implements IFunction {

 String[] s1 = new String[0];                       //首先定义一个元素个数为0的数组
 
 //向队列末尾加入一个元素方法的实现:

//先将原来的数组复制到新的数组中去,在将加进来的元素补到新的数组的末尾
 public void add(String i2) {
  String[] s2 = new String[s1.length+1];     //首先定义一个比原来的数组大一的新的数组
  for(int i = 0; i < s1.length; i++) {               //利用循环将旧的数组复制到新的数组中
   s2[i] = s1[i];
  }
  s2[s1.length] = i2;                                    //将加进来的新的元素补到新数组的末尾
        s1 = s2;                                             //将原来的数组指向新的数组,以下方法出现均同理
 }


 //删除数组中指定下标的元素
 public void delete(int index) {
  String[] s2 = new String[s1.length-1];       //先定义一个比原来数组小1的数组
  for(int i = 0; i < s1.length-1; i++) {             //利用循环和判断语句分别将旧数组的元素复制到新的数组中
   if(i < index) {                                             
    s2[i] = s1[i];                                             //当i < index 时直接复制      
   }
   else s2[i] = s1[i+1];                                   //当i >= index时,将旧的数组的下一个下标的元素复制到新的数
  }                                                                //当前的下标下
  s1 = s2;
 }
    
 //将元素插入到指定的位置
 public void insert(String s, int index) {
  String[] s2 = new String[s1.length+1];
  for(int i = 0; i < s1.length; i++) {
   if(i < index) {                                          //利用循环并判断,

                                                                //  当i<index时直接复制到新的数组中去
    s2[i] = s1[i];
   }
   else if(i == index) {                                 //当i = index 时 将要插入的元素插入到新数组的当前下标下
    s2[i] = s;
   }
   else
    for(int j = index; j < s1.length; j++) {      //当i > index 时 利用循环将旧的数组从下标等于index的元素起
    s2[j+1] = s1[j];                                       //依次复制到新的数组的比其大1的下标下 
   }
  }
  
  s1 = s2;
 }
 
 //获取队列中指定的下标的元素
 public String get(int index) {
  
  return s1[index];                                            //返回指定下标的元素
 }


 //得到队列的长度
 public int size() {
  
  return s1.length;                                             //调用length方法返回队列的长度      
 }

 

}

/**
 * 程序入口类
 */
package 队列增删改查;

public class Main {

 public static void main(String[] args) {
  
  FunctionTest fun = new FunctionTest();
  
  //向队列中加入十个元素
  for(int i = 0; i < 10; i++) {
   String s = i+"";
   fun.add(s);
  }
  
  //打印出每个元素
  System.out.println("加入十个元素后队列的元素如下:");
  for(int i = 0; i < fun.size() ; i++) {
   System.out.print(" "+fun.get(i));                          //调用get()方法打印出每个元素
  }
  
  System.out.println();
  //返回队列的长度
  System.out.println("队列的长度为"+fun.size());     //调用size()方法打印出队列的长度
  
  //删除指定下标的元素
  fun.delete(3);
  
  //打印出删掉后队列的各个元素
  System.out.println("删除指定元素后队列的元素如下(删除下标为3的元素):");
  for(int i = 0; i < fun.size(); i++) {
   System.out.print(" "+fun.get(i));
  }
  System.out.println();
  
  //返回队列删除元素后队列的长度
  System.out.println("删除后队列的长度为"+fun.size());
  
  //向指定的位置插入元素
  System.out.println("向指定下标(4)插入指定元素(100)后队列变为:");
  fun.insert("100", 4);
  for(int i = 0; i < fun.size() ; i++) {
   System.out.print(" "+fun.get(i));
  }
  
  System.out.println();
  System.out.println("插入后元素的个数变为"+fun.size());
 
     }
}

输出结果:

加入十个元素后队列的元素如下:
 0 1 2 3 4 5 6 7 8 9
队列的长度为10
删除指定元素后队列的元素如下(删除下标为3的元素):
 0 1 2 4 5 6 7 8 9
删除后队列的长度为9
向指定下标(4)插入指定元素(100)后队列变为:
 0 1 2 4 100 5 6 7 8 9
插入后元素的个数变为10

分享到:
评论

相关推荐

    Python实现栈和队列的简单操作方法示例

    对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。当然,我们也可以使用链表来实现。 stack的实现代码(使用python内置...

    队列:先入先出的数据结构

    队列是典型的FIFO数据结构,插入(insert)/入队(enqueue)的新元素始终被添加在队列的末尾。删除(delete)/出队(dequeue)始终移除队列中的第一个元素。 //队列的实现 #include class MyQueue { private: //...

    数据结构与算法.xmind

    找到想要插入位置的上一个节点 将原本由上一个节点的指向交由插入的节点来指向 上一个节点指针域指向想要插入的节点 获取链表的长度 每访问一次节点,变量++操作即可 删除给定位置的...

    数据结构实验.rar

    //根据有序判定函数compare,在有序表L的适当位置插入元素e; (2)OrderInput(&L, int (*compare)(a, b)) //根据有序判定函数compare,并利用有序插入函数OrderInsert,构造有序表L; (3) OrderMerge(&La, &Lb, &...

    Windows 系统错误代码简单分析

     0146 指定的路径已经在替换中使用。  0147 资源不足,无法执行该命令。  0148 此时无法使用指定的路径。  0149 试图连接或替换某个驱动器目录,该驱动器上的某个目录是上一次替换的目标目录。  0150 ...

    powerbuilder

    用PrintOpen()函数打开的打印作业号string:string类型,指定要打印的文本x:integer类型,指定文本开始打印位置的x坐标,以千分之一英寸为单位y:integer类型,指定文本开始打印位置的y坐标,以千分之一英寸为单位...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    C#编程经验技巧宝典

    43 &lt;br&gt;0061 树的实现 44 &lt;br&gt;3.2 排序 48 &lt;br&gt;0062 如何实现选择排序算法 48 &lt;br&gt;0063 如何实现冒泡排序算法 49 &lt;br&gt;0064 如何实现快速排序算法 50 &lt;br&gt;0065 如何实现插入排序算法 ...

    《数据结构 1800题》

    11. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( )【上海海运学院 1999 一、1(1分)】 12. 数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。( ) 【华南理工大学 2002...

    C++MFC教程

    RemoveAt 删除指定位置CString对象 RemoveAll 删除数组中所有CString对象 GetAt 得到指定位置的CString对象 SetAt 修改指定位置的CString对象 InsertAt 在某一位置插入CString对象 常用宏 RGB TRACE ASSERT ...

    精易模块[源码] V5.15

    1、新增“线程_枚举”枚举指定进程ID中所有线程列表,成功返回线程数量,失败返回零。 2、删除“文件_取图标”与"文件_取图标句柄"功能重复。 3、优化“系统_创建桌面快捷方式”流程代码,感谢易友[ds9660]反馈。 4...

Global site tag (gtag.js) - Google Analytics