我完全理解堆栈应该做什么(后进先出)。它只是堆栈的一部分让我感到困惑。
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 * location。
假设我的字符串是“()”
在GDB中:
如果我读入'('我将它推入堆栈......如果我读入')'我弹出它。
当我这样做时:p a->位置打印出“()”
我只是想知道我应该被删除“()”从A-&GT值;位置每次我弹出堆栈或出栈不相干为α->位置?
换句话说,它应该在弹出后打印出来吗?
如果这个问题没有意义,我提前道歉
答案 0 :(得分:2)
是的,从堆栈中弹出一个元素后,它不再可以在堆栈上访问。表示可访问元素数量的堆栈大小也应减少一个。访问top-value和弹出top值之间的区别是C ++ STL(我知道你在C中工作,但这只是一个例子)提供两个不同的函数来弹出和访问顶层的原因之一std::stack
对象中的值。 std::stack::top
方法允许您实际访问堆栈顶部的元素,而std::stack::pop
方法通过从顶部“弹出”删除元素。如果您打算使用单个pop
方法,那么该方法应该返回堆栈顶部的值的副本,同时还从堆栈数据中删除该值的内部表示 - 结构
答案 1 :(得分:2)
由于您还没有发布您的代码,因此很难确定,但我怀疑您将指针(例如char *位置)与其指向的内容混淆。当前指向字符串的指针"()"将在gdb中打印为(),但指向(堆栈顶部)的字符只是'('。
如果您发布至少部分代码,将更容易更具体。