了解堆栈数组实现(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方法,那么这个方法应该既返回堆栈顶部的值的副本,同时也从堆栈数据结构中去除该值的内部表示。

链接地址: http://www.djcxy.com/p/14771.html

上一篇: Understanding stack array implementation (C)

下一篇: C++ Function Call vs. New Blocks for Push/Popping on the Stack