什么是无界数组,无界数组和动态分配数组之间有什么区别?与无界数组相关联的常见操作是什么?(就像我们有pop和push堆栈数据结构一样)
发布于 2014-02-02 12:07:19
动态分配的数组是一个固定大小的数组,在创建数组时大小是固定的。创建数组时,分配是动态的。一旦它被创建,它就是固定的。
注意,动态分配的与动态不同。
使用无界数组,在向数组中添加项和从数组中移除项时,数组的大小可以任意增大和缩小。无界数组通常在后台使用动态分配的数组。本质上,使用动态分配的数组来创建块/内存池,以提高效率,而不是在添加新项时不断调整大小。
查看TheCodeArtist链接的文章中无界数组的代码:
struct ubarray {
int limit; /* limit > 0 */
int size; /* 0 <= size && size <= limit */
elem[] A; /* \length(A) == limit */
};请注意,该数组将根据需要增长(在达到极限时),并且由动态分配的数组支持:
elem[] A; /* \length(A) == limit */发布于 2014-02-02 12:16:56
两个不同的概念。静态或动态定义的数组是有界的,因为在使用它的代码中需要知道边界是什么。对于一个未绑定的数组,代码需要一些方法来发现数组本身的边界。
e.g
sArray = Array[2..10] Of Integer
dArray = Array[x..y] Of Integer
void DoSomethingToArray(Array Of Integer : myArray)
{
for(int i = myArray.LowerBound; i <= myArray.UpperBound; i++)
{
// twiddle with it.
}
} 您可以将sArray或dArray传递给函数,它将非常高兴。
Lower和UpperBound是一个选项,而!Stack.Empty,List.Count > 0,枚举数,甚至Sizeof(myArray) / SizeOf(myArrayType)都是可能的。重要的一点是,传递给数组的代码不需要知道数组是如何绑定的,并且可以接受任何特定类型的数组。
设置数组的边界实质上就是分配内存。一个使用数组的函数应该只关心它没有引用没有分配给数组的内存。
发布于 2014-02-02 12:00:51
无界数组基本上是动态的,但是动态数组在术语上可能略有不同。因为您可以动态绑定一个数组。简单地说,对于无界数组/列表是没有限制的,是的,您可以推送/弹出队列/去队列,或者从任何无界列表或数组中添加/删除。希望我的回答能澄清你的问题。
int userInput = 0;
Array dynamic_arr = new Array[userinput];//example of dynamic array
List<string> unbounded_arr = new List<string>(); // example of unbounded arrayhttps://stackoverflow.com/questions/21510201
复制相似问题