栈、队列,都可以不通过指定地址和索引来对数组的元素进行读写。需要临时的保存计算过程中的数据、连接在计算机上的设备或者输入输出的数据时,都可以通过这些方法来使用内存。如果每次保存临时数据都需要指定地址和索引,程序就会变得比较麻烦,因此要加以改进。
栈和队列的区别在于数据出入的顺序不同。在对内存数据进行读写时,栈用的是LIFO(Last Input First Out,后入先出)方式,而队列用的则是FIFO(First Input First Out,先入先出)方式。如果我们在内存中预留出栈和队列所需的空间,并确定好写入和读出的顺序,就不用再指定地址和索引了。
如果要在程序中实现栈和队列,就需要以适当的元素数来定义一个用来存储数据的数组,以及对该数组进行读写的函数对。当然,在这些函数的内部,对数组的读写 会涉及索引的管理,但从使用函数的角度来说,就没有必要考虑数组及索引了。
我们把往栈中写入数据的函数命名为Push,把从栈中读出数据的函数命名为Pop,把往队列中写入数据的函数命名为EnQueue,把从队列中读出数据的函数命名为DeQueue。通过使用这些函数,可以将数据临时保存(写入),然后再在需要时候把这些数据读出来(代码清单4-4、代码清单4-5)。
顾名思义,在栈中,LIFO方式表示栈的数组中所保存的最后面的数据(Last In)会被最先读取出来(First Out)。代码清单4-4的程序运行后,按照123,456,789的顺序写入的数据,结果按照789、456、123的顺序读取出来(图4-7)。
与栈相对的是队列,顾名思义,FIFO方式表示队列的数组中所保存的最初数据(First Input)会最先被读取出来(First Out)。代码清单4-5中的程序运行后,按照123,456,789的顺序写入的数据,结果按照123,456,789的顺序读取出来(图4-8)。
队列这一方式也称为排队。排队能起到很好的缓冲作用。队列一般是以环状缓冲区(ring buffer)的方式来实现的,也就是本章标题所说的“熟练使用有棱有角的存在”。
标签:4.5,函数,队列,写入,数组,缓冲区,数据,First From: https://www.cnblogs.com/24koi/p/17110227.html