算法与数据结构(1)——栈和队列初步认识

《栈》

栈的实现栈只能在一头进行操作,相对比较容易实现。用一个数组int stack[]和栈顶指针top即可,插入和删除(也称push和pop)

栈的实现代码:

 
  
//用一个数组int stack[]和栈顶指针top即可实现
//top指向栈顶元素(即栈顶元素的坐标)
//这里逻辑上的“顶”实际上为无理数组上的“尾”部;
1 stack[ ++ top ] = x ; / ¤ push ¤ /
2 x = s tack [ top ¡¡]; / ¤ pop ¤ /

对物理实现和逻辑实现的理解:

和链表删除类似,出栈时并不需要让stack[top]变为0。由于top已经减1了,在逻辑上原来的栈顶元素已经不在栈中,虽然在物理上这个元素本身没有一点变化。

《队列》:

可以借鉴STL的规矩,把¯rst作为第一个元素而last 作为最后一个元素的后一个位置,则插入和删除的
代码如下:

 
  
1 // 注意first指向第一个元素,
2   // last指向最后一个元素的后一个位置
//队列的实现,一个数组,两个指针即可,前插入,后弹出
3   x = queue [ f i r s t ++ ] ; /* 出队 */
4 queue [ l a s t ++ ] = x ; /* 入队 */

出现的问题:空间上的浪费 !!!

解决代码方案——循环队列:

 
  
// 没有加“尾撞头”可能性的判断和处理,所以该队列的元素承载量要保证
// 不能超过预设的n
x = queue [ f i r s t ] ; f i r s t = ( f i r s t + 1 ) % n ; /* 出队 */
queue [ l a s t ]
= x ; l a s t = ( l a s t + 1 ) % n ; /* 入队 */

转载于:https://www.cnblogs.com/liushang0419/archive/2011/05/06/2039362.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值