理解堆栈数组实现(C)

时间:2013-02-21 03:22:09

标签: c gdb stack

我完全理解堆栈应该做什么(后进先出)。它只是堆栈的一部分让我感到困惑。

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值;位置每次我弹出堆栈或出栈不相干为α->位置?

换句话说,它应该在弹出后打印出来吗?

如果这个问题没有意义,我提前道歉

2 个答案:

答案 0 :(得分:2)

是的,从堆栈中弹出一个元素后,它不再可以在堆栈上访问。表示可访问元素数量的堆栈大小也应减少一个。访问top-value和弹出top值之间的区别是C ++ STL(我知道你在C中工作,但这只是一个例子)提供两个不同的函数来弹出和访问顶层的原因之一std::stack对象中的值。 std::stack::top方法允许您实际访问堆栈顶部的元素,而std::stack::pop方法通过从顶部“弹出”删除元素。如果您打算使用单个pop方法,那么该方法应该返回堆栈顶部的值的副本,同时还从堆栈数据中删除该值的内部表示 - 结构

答案 1 :(得分:2)

由于您还没有发布您的代码,因此很难确定,但我怀疑您将指针(例如char *位置)与其指向的内容混淆。当前指向字符串的指针"()"将在gdb中打印为(),但指向(堆栈顶部)的字符只是'('。

如果您发布至少部分代码,将更容易更具体。