当前位置: 首页 > 知识库问答 >
问题:

使用指针的C链表堆栈

翁俊良
2023-03-14

所以我有一个堆栈,它允许典型的Push和Pop函数。我很难理解这一切实际上是如何在代码方面工作的。我在这里看到了这篇文章,最佳答案中的图片/图表,展示了列表是如何被“推”下来的,你指向最新的元素。我有一个

node* stack;

它挂接到结构“节点”

struct node
{
    ItemType data;
    node* next;
};

我如何结合一个推拉与"节点*下一步;"?最难理解的是我将如何真正做到这一点。我知道它最初指向空,然后如果我推一个2,4,6,它将是6,4,2,#。掌握如何实际使用链表中的指针来完成它会让我陷入循环。我可以在没有指针的情况下做到这一点,但指针让我明白了。谢谢你的帮助,我真的很想解决这个问题。我在这里评论得太快了。谢谢!

编辑1:已解决-我的推送工作正常

编辑2:我现在想跳出来。这是否意味着我必须将指针指向下一个值?我该如何处理旧的顶部节点?自从我更新后就删除了吗?

共有1个答案

殳毅
2023-03-14

这看起来像个C问题。

函数push可以通过以下方式在C中定义

void push( node * &stack, const ItemType &item )
{
    node *tmp = new node { item. stack };
    stack = tmp;
}

在C语言中,它可能看起来像

int push( struct node * *stack, const ItemType *item )
{
    node *tmp = malloc( sizeof( struct node ) );

    if ( tmp )
    {
        tmp->data = *item;
        tmp->next = *stack;

        *stack = tmp;
    }

    return tmp != NULL;
}

编辑:在你编辑了你的帖子之后,我也编辑了我的帖子。指针堆栈似乎是StackClass类的数据成员。在这种情况下,成员函数可以如下所示

void StackClass::Push( ItemType newItem ) 
// I would declare the parameter as const ItemType &newItem 
{ 
    node* temp = new node;
    temp->data = newItem;
    temp->next = stack;

    stack = temp;
}
 类似资料:
  • 我正在尝试创建二维双链接圆形阵列,从txt文件读取数据并自动创建节点。我的程序正在正确地读取第一行,但当它到达下一行并开始创建下一个节点时,会出现空指针。我不明白为什么会这样,请帮帮我。 这些都是错误。Null指针在尝试创建第二个节点时发生。它正确地创建第一个节点,而不是紧接着创建空指针。 第77行=位置next=n; 第69行=插入后(head.prev, x); 第18行=mList。镶片(k

  • 我试图了解下面创建单链表的代码是如何使用双指针工作的。 我理解在函数push()中使用双指针的目的,它允许您更改指针headRef在函数中指向的内容。但是,在函数constructList()中,我不理解以下行是如何工作的: 最初lastPtrRef将指向指向NULL的head。在对推送()的第一次调用中,在构造列表()中的for循环中,head指向的值发生了变化(它指向包含值1的新节点)。因此,

  • 我正在写作业,想知道这实际上是什么定义:

  • 问题内容: 使用Java中的链表实现堆栈的最佳方法是什么? 编辑:我将最好的定义为最有效的使用干净的代码。我已经使用数组来实现堆栈,但是对链接列表不熟悉,因此想知道是否有人可以帮助我实现类似于以下内容的内容: 编辑:如果有人感兴趣,这是链表的实现。 问题答案: 假设您真的想从头开始,而不是使用现有的完美堆栈实现之一,那么我建议您: 创建一个“ MyStack ”类,该类实现所需的任何接口(也许列出

  • 问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p

  • C++ 函数 向函数传递参数的指针调用方法,把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。 按指针传递值,参数指针被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为指针类型,该函数用于交换参数所指向的两个整数变量的值。 // 函数定义 void swap(int *x, in