队列和数组

.数组
1.数组是什么类型的存储结构
数组也是属于应用类型的一种。
数组是一种线性的存储结构。
//链式结构

2.实例化一维数组的格式

一种:数据类型 []  数组名 = new 数据类型[数组的长度];
二种: 数据类型 []  数组名 = {值列表};
三种:数据类型 []  数组名;
数组名 = new 数据类型[数组的长度];
四种:数据类型 []  数组名 = new 数据类型[]{值列表};
数据类型 []  数组名;
数组名 = new 数据类型[]{值列表};

3.对一维数组的操作,通过什么?
得到数组的长度:数组.length属性名;
数组的下标是用来获取相应位置的值。
数组名[下标];
数组的下标从0开始的。

4.实例化二维数组的格式
一种:数据类型 [][]  数组名 = new 数据类型[行数][列数];
二种: 数据类型 [][]  数组名 = {{值列表},......};
三种:数据类型 [][]  数组名;
数组名 = new 数据类型[行数][列数];
四种:数据类型 [][]  数组名 = new 数据类型[][]{{值列表},......};
数据类型 [][]  数组名;
数组名 = new 数据类型[][]{{值列表},......};

对二维数组的操作,通过什么?
得到二维数组的行数:数组.length属性名;
得到二维数组的列数:数组[下标].length属性名;
是否可以创建不规则的二维数组?
可以创建不规则的二维数组,用第二种格式。
数组的下标是用来获取相应位置的值。
数组名[行下标][列下标];
数组的下标从0开始的。

5.随机数类的使用

java.util.Random的一个类

数组的缺点?
1.数组的长度是固定。
2.数组只能存储同样的数据类型。

数组的优点?
运行速度快-->有序的,查找的速度快,直接通过下标来找相应的数据。
队列
1.为什么要使用队列
数组不能随意的添加或者删除空间。

2.如何实现队列
借助于数组和引用传递。

自定义队列就是用类来操作数组,将所有的操作用类封装起来,在类外是无法看到具体的操作

实现通用的队列
//自定义泛型队列的接口
public interface NetJavaList<E> {
//向队列中加一个对象
public void add(E e);
//向队列中指定位置插入一个对象
public void insert(E e, int index);
//取得的队列中指定位置的对象
public E get(int index);
//删除某位置对象
public E delete(int index);
//得到队列中的长度,及队列中元素的个数
public int size();
}
//实现的泛型队列
public class STList<E> implements NetJavaList<E>{
private Object[] srcA = new Object[0];
//向队列中加一个对象
public void add(E e){
Object[] destA = new Object[srcA.length+1];
destA[srcA.length]=e;
System.arraycopy(srcA, 0, destA, 0, srcA.length);
srcA=destA;
}
//向队列中指定位置插入一个对象
public void insert(E e, int index){
Object[] destA = new Object[srcA.length+1];
System.arraycopy(srcA, 0, destA, 0, srcA.length);
for(int i=index+1;i<destA.length;i++){
destA[i+1]=destA[i];
}
destA[index]=e;
srcA=destA;
}
//取得的队列中指定位置的对
public E get(int index){
E st = (E)srcA[index];
return st;
}
//删除某位置对象
public E delete(int index){

for(int i=index;i<srcA.length;i++){
srcA[i]=srcA[i+1];
}
}
//得到队列中的长度,及队列中元素的个数
public int size(){
return srcA.length;
}
}
找出二维数组中最大的一个数值
public class Twoarray {
public static void main(String[] args){
//定义一个二维数组
int[][] srcA = creat();
int t = cacular(srcA);
System.out.println("二维数组的最大值是:"+t);
//给数组中的每个元素赋值
public static int[][] creat(){
int ta[][] = new int[5][8];
for(int i=0;i<ta.length;i++){
for(int j=0;j<ta[i].length;j++){
java.util.Random ran = new java.util.Random();
int value =ran.nextInt(300)+200;
ta[i][j]=value;
}
}
return ta;
}

public static int cacular(int[][] x){
int max=x[0][0];
for(int i=0;i<ta.length;i++){
for(int j=0;j<x[i].length;j++){
if(max<x[i][j]){
max=x[i][j];
}
}

}
return max;
}


}
}

 

### SystemVerilog 中队列数组的区别及使用场景 #### 一、基本概念 在 SystemVerilog (SV) 中,数组是一种固定大小或动态调整大小的数据存储结构,而队列则是一种特殊的动态数据结构。两者都用于管理一组相同类型的元素,但在实现细节上存在显著差异。 - **数组**可以分为静态数组、动态数组关联数组三种主要形式[^1]。 - **队列**则是 SV 提供的一种特殊复合数据结构,支持动态扩展收缩操作,并具有高效的插入删除特性[^2]。 --- #### 二、具体区别 | 特性 | 数组 | 队列 | |---------------------|-------------------------------------------|---------------------------------------| | **声明方式** | `type array_name[size];` 或者动态分配 | `type queue_name[$];` | | **大小控制** | 静态数组大小固定;动态数组需显式设置 | 大小完全动态,无需预先指定 | | **索引范围** | 连续整数区间 | 可变长度,通常从0开始连续编号 | | **内存分配** | 编译期分配(静态)或运行时分配(动态) | 堆空间自动管理 | | **性能特点** | 访问速度快 | 插入/删除效率高 | | **适用场合** | 存储固定数量的元素 | 动态增删需求高的场景 | 上述表格展示了两者的本质差别[^4]。例如,在处理图像像素或其他已知尺寸的任务时更倾向于采用数组来优化访问速度;而在模拟 FIFO/LIFO 结构或者需要频繁改变集合规模的情况下,则推荐利用队列的优势。 --- #### 三、典型用法示例 以下是针对两种结构的具体编码实例: ##### (1)数组的操作演示 ```systemverilog // 定义一个简单的静态数组并初始化 integer static_array[5]; initial begin foreach(static_array[i]) static_array[i] = i * 2; end // 如果是动态数组,则如下所示: dynamic integer dynamic_array[]; initial begin dynamic_array = new[3]; // 显式设定初始容量为3 dynamic_array[0] = 1; dynamic_array.push_back(2); // 添加新项到末尾 end ``` ##### (2)队列的功能展示 ```systemverilog int my_queue[$]; initial begin $display("Queue size before insertions: %d", my_queue.size()); // 向队首添加元素 my_queue.insert(0, 9); // 向队尾追加多个值 my_queue = {my_queue, 7}; $display("Updated Queue contents:"); foreach(my_queue[index]) $write("%d ", my_queue[index]); // 删除第一个项目 void'(my_queue.delete(0)); $display("\nFinal Queue length after deletion: %d", my_queue.size()); end ``` 通过以上代码可以看出,相比起传统意义上的数组而言,队列提供了更为灵活便捷的方法来进行数据维护工作。 --- #### 四、实际应用场景分析 对于某些特定领域来说,选择合适的数据类型至关重要: - 当设计验证平台涉及到事务级建模(TLM),比如总线读写请求包传输过程仿真时,由于消息数目不确定且可能随时增加减少,因此更适合选用队列作为缓冲区载体[^3]; - 而如果是在硬件描述层面构建寄存器文件(Register File),因为其地址映射关系明确稳定不变,所以一般会运用多维数组表示各个单元格位置及其对应状态信息. 综上所述,合理权衡二者之间的优劣可以帮助工程师更好地完成各自负责的工作模块开发任务. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值