黑马程序员技术交流社区
标题:
如何使用栈实现一个队列
[打印本页]
作者:
张少甫
时间:
2012-9-20 16:45
标题:
如何使用栈实现一个队列
如何使用栈实现一个队列。
作者:
iamheima
时间:
2012-9-20 18:37
你所说的栈是说的数据结构里面那先进后出队列吗?
可以封装一个类,类内部定义一个数组(在构造函数中确定栈的最大空间),或者是可变长度的List对象,再就是封装两个方法了:出栈和入栈
作者:
iamheima
时间:
2012-9-20 19:17
class Stack<T>
{
private int point;
private T[] arr;
public Stack(int maxLength)
{
arr = new T[maxLength];
point = -1;
}
//出栈
public T Pop()
{
if (point < 0)//出栈判断下限
{
throw new Exception("堆栈空,不能再做弹出操作!");
}
return arr[point--];
}
//入栈
public bool Push(T node)
{
if (point >= arr.Length)//入栈判断上限
{
return false;
}
int PreLength = point;
arr[++point] = node;
if (point - PreLength == 1)
{
return true;
}
else
{
return false;
}
}
//取栈顶元素
public T Top()
{
if (point < 0)//出栈判断下限
{
throw new Exception("堆栈空,不能读栈顶!");
}
return arr[point];
}
//元素总数
public int Count
{
get{return point+1;}
}
}
复制代码
这是我刚才写的,不知道是不是你想要的...
作者:
孔德智
时间:
2012-9-21 10:53
有个思路你看看,是否对你有用吧
QQ截图20120921105254.png
(4.87 KB, 下载次数: 59)
下载附件
2012-9-21 10:52 上传
作者:
邸亚星
时间:
2012-9-21 12:48
1,使用两个栈a b ,假定a是负责push操作,使用一个变量back_elem来存储最后的元素。2,实现队列的push操作,每次添加操作,都有相应的对栈a进行添加元素,并且对back_elem赋值,实现队列pop操作,每次进行删除操作因为b负责pop操作:首先判断栈a是否为空?如果b为空,则判断a是否为空? 如果a也为空, 则输出错误信息,此时队列为空。如果a不为空, 则将栈a中的所有数据存储到b中。执行b.push(a.top()), b.pop(). 然后在对栈b执行,b.pop()操作,将队列的头元素删除如果b不为空, 则直接对b执行 b.pop()操作。(4)实现队列的front()操作,方法如pop操作相同,只是在最后一步使用b.top()返回值。(5)实现队列的back()操作,因为我们变量back_elem保存着最后一个输入的数据,故直接将其返回。(6)实现队列的size()操作,和empty()操作,就是对a b分别执行操作。
作者:
张少甫
时间:
2012-9-21 16:58
/// <summary>
/// 栈实现队列
/// </summary>
class StackAndQueue
{
#region ==== 私有字段 ====
private Stack stack = new Stack();
private Stack queue = new Stack();
#endregion
#region ==== 构造函数 ====
public StackAndQueue()
{
}
#endregion
#region ==== 公共方法 ====
/// <summary>
/// 入栈
/// </summary>
/// <param name="context"></param>
public void Push(string context)
{
if (!string.IsNullOrEmpty(context))
{
stack.Push(context);
}
}
/// <summary>
/// 出栈
/// </summary>
/// <returns></returns>
public string Pop()
{
if (stack.Count!=0)
{
queue.Clear();
foreach (var item in stack)
{
queue.Push(item);
}
stack.Clear();
}
if (queue.Count!=0)
{
return queue.Pop() as string;
}
return string.Empty;
}
#endregion
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2