【发布时间】:2017-02-25 20:39:48
【问题描述】:
我的问题如下:
我有一个函数来操作 MAX 元素数组的内容。该函数将如下所示:
//GLobal Variables
uint8_t my_array[ MAX ];
#define EMPTY 0xFF
...
void initArray( void )
{
for( uint8_t i=0; i<MAX; i++ )
{
my_array[ i ] = EMPTY;
}
}
void manipulateArray( uint8_t value )
{
for( uint8_t i=0; i<MAX; i++ )
{
if( EMPTY == my_array[ i ] )
{
my_array[ i ] = value;
break;
}
}
}
...
int main( void )
{
...
initArray();
...
while( false == exit_flag )
{
manipulateArray( value );
//get new value from user
//update exit_flag based on new value
}
...
return 0;
}
但后来我想,如果我最终做了很多插入/删除,那么我会疯狂地使用 for 循环,这势必会影响程序的速度或大 O(N)。所以我想如果我使用另一个全局
变量来跟踪数组中下一个空运动的插入位置,而不是每次都循环遍历它:
//GLobal Variables
uint8_t my_array[ MAX ];
uint8_t idx = 0;
...
void manipulateArray( uint8_t value )
{
my_array[ idx++ ] = value;
}
我的假设是否正确?同样,在这种特殊情况下,最好使用另一种更适合操作性质的数据结构(大量插入和少量删除):向量、链表......
提前致谢,
【问题讨论】:
-
全局变量;哎呀。
-
这与您提出的问题无关,但
-1 == my_array[i]怎么可能是真的? -
“我的假设是否正确”。是的。 “这个特殊情况”。什么特殊情况?如果没有对总体目标的更详细要求,很难评估什么是好的方法?更多的插入?更多删除?没有删减?随意查找?等等……
-
代码的第一个版本将当前等于 255 的每个元素设置为
value(除非MAX > 255在这种情况下它不会终止)。第二个版本将数组的一个值(索引:0、1、...、255、0、1、...)设置为value。看起来他们根本不一样。 -
@PaulHankin touche.