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

/**
 * 定义一个接口类(定义数组的增加,删除,按下标查询,返回队列长度)的方法
  */
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在具有10个元素队列指定位置插入数据,可以使用循环队列的方式来实现,并且队列的最大值为20,所以需要使用一个数组来存储队列元素。下面是用C语言实现指定位置插入数据的代码: ```c #include <stdio.h> #define MAXSIZE 20 // 定义队列的最大容量 int queue[MAXSIZE]; // 队列数组 int front = -1; // 队头指针 int rear = -1; // 队尾指针 void enqueue(int data, int pos) // 将数据插入指定位置 { if ((rear + 1) % MAXSIZE == front) // 判断队列是否已满 { printf("Queue is full!\n"); return; } else if (pos < 1 || pos > rear + 2) // 判断插入位置是否合法 { printf("Invalid position!\n"); return; } else { if (front == -1) // 如果队列为空,则初始化队头指针 { front = 0; rear = 0; } else if (rear == MAXSIZE - 1) // 如果队尾指针已经到达数组末尾,则需要将其置为0 { rear = 0; } else { rear++; // 队尾指针加1 } for (int i = rear; i > pos - 1; i--) // 将指定位置后的元素后移 { queue[i] = queue[i - 1]; } queue[pos - 1] = data; // 插入数据 printf("Enqueue %d at position %d\n", data, pos); } } int main() { enqueue(11, 3); // 在队列的第3个位置插入数据11 return 0; } ``` 在上述代码中,使用数组`queue`来实现队列,使用变量`front`和`rear`来表示队头和队尾指针。函数`enqueue`用于将数据插入指定位置,若队列已满或插入位置不合法则输出提示信息。在`enqueue`函数中,首先判断队列是否为空,然后判断队列是否已满,然后判断插入位置是否合法,最后将指定位置后的元素后移,然后将数据插入指定位置。在`main`函数中调用`enqueue`函数并传入数据11和插入位置3,即可在队列的第3个位置插入数据11。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值