了解堆栈数组实现(C)
我完全理解一个堆栈应该做什么(继续,先出)。 这只是堆栈的一部分,让我感到困惑。
typedef struct dynArrStruct
{
char *location; //element
int length; //max size
int currSize; //top
}dynArr;
dynArr a; //declared in main
//sorry this is an assignment and I try to refrain from posting my full code
//on here b/c of potential cheaters
我使用这个代码作为我的堆栈。
基本上我的程序应该找到平衡的角色:'{','(','<','['和他们的关闭柜台部分。
简而言之,每次我找到一个开口支架时,我都会将它推到堆叠上。 我一直把它推到栈上,直到我找到一个闭合的大括号,并且一找到闭合大括号,我就需要弹出栈。
我感到困惑的是变量char *的位置。
假设我的字符串是“()”
在GDB中:
如果我读了'('我把它推到堆栈上,如果我读了')',我就弹出它。
当我这样做时:p a-> location打印出来“()”
我只是想知道我是否应该从a-> location的值中删除“()”,每次我弹出一个堆栈或者弹出堆栈都与a-> location不相关?
换句话说,它应该在弹出后“”打印出来吗?“
如果这个问题没有道理,我会提前道歉
既然你没有发布你的代码,这很难确定,但我怀疑你正在将指针(例如char *位置)与它所指向的内容混淆。 当前指向字符串“()”的指针将在gdb中以()打印出来,但是指向(堆栈顶部)的字符只是'('。
如果您至少发布了部分代码,则更加具体。
是的,从堆栈中弹出一个元素后,它不应该再被堆栈访问。 代表可访问元素数量的堆栈大小也应该减1。 访问顶端值和弹出顶端值之间的区别是为什么C ++ STL(我知道你在C中工作,但这仅仅是一个例子)提供了两种不同的功能来弹出和访问顶端值在一个std::stack
对象中。 std::stack::top
方法允许你实际访问std::stack::top
的元素,而std::stack::pop
方法通过从顶部“弹出”它来移除元素。 如果你打算使用单一的pop
方法,那么这个方法应该既返回堆栈顶部的值的副本,同时也从堆栈数据结构中去除该值的内部表示。
上一篇: Understanding stack array implementation (C)
下一篇: C++ Function Call vs. New Blocks for Push/Popping on the Stack