如何在 C 中遍历堆栈

发布于 科技 2024-06-08
22个回答
  1. 匿名用户2024-01-29

    由于堆栈的性质,只有弹出顶部元素才能看到下一个元素。

    所以,如果你想遍历堆栈,你必须一个接一个地弹出顶部的元素,当堆栈变成空时,你将遍历堆栈。

    如您所见,您只能遍历堆栈一次,然后堆栈变为空。

  2. 匿名用户2024-01-28

    遍历预先订购的二叉树(非递归)。

    访问 t->data 后,将 t 放入堆栈并遍历左侧子树。

    遍历左侧子树时,堆栈的顶部元素应为 t,在堆栈之外,然后依次遍历 t 的右侧子树。

    void preorder_stack(bitnode *t)bitnode *stack[maxn];

    int top = -1;

    while(t ||top!=-1)

    while(t)

    printf("%c",t->data);

    stack[++top] = t;

    t = t->lchild;

    if(top != -1)

    t = stack[top--]

    t = t->rchild;

    遍历中阶二叉树(非递归)。

    首先,将 t 放入堆栈中并遍历左侧子树;

    遍历左边子树时,堆栈的顶部元素应该是 t,在堆栈外,访问 t->data,然后按中间顺序遍历 t 的右子树。

    void inorder_stack(bitnode *t)bitnode *stack[maxn];

    int top = -1;

    while(t ||top!=-1)

    while(t)

    stack[++top] = t;

    t = t->lchild;

    if(top != -1)

    t = stack[top--]

    printf("%c",t->data);

    t = t->rchild;

    遍历后排序二叉树(非递归)。

    可以使用标记方法,当节点进入堆栈时,添加一个标志标签(0:左边子树前的字段保护,1:右边子树前的字段保护)。

    首先,将 t 和 tag (0) 放入堆栈中并遍历左侧子树。 返回后,将堆栈的 top 标签修改为 1,并遍历右侧子树。 最后,访问根节点。

    void postorder_stack(bitnode *t)bitnode *stack[maxn];

    bool tag[maxn];

    int top = -1;

    while(t ||top!=-1)

    while(t)

    stack[++top] = t;

    tag[top] = 0;

    t = t->lchild;

    t = stack[top--]

    printf("%c",t->data);

    if(top != -1)

    tag[top] = 1;设置顶部堆栈标记。

    t = stack[top];以保存在堆栈顶部的指针为例。

    t = t->rchild;

    else break;

  3. 匿名用户2024-01-27

    如果您使用的是数组 a, int index,则可以使用 :p ush(num) 函数:a[index] = num; index ++pop() 为:

    index --return a[index]。

    语言特性:在C++中,类是支持数据封装的工具,对象是数据封装的实现。 C++ 通过建立用户定义的类来支持数据封装和数据隐藏。

    在面向对象的编程中,合法操作的数据和函数被封装为类定义。 对象被描述为具有给定类的变量。 每个给定类的对象都包含该类指定的许多私有、公共和受保护成员。

  4. 匿名用户2024-01-26

    你是用数组和索引还是用链表实现它?

    如果您使用的是数组 a、int 索引,则可以使用:

    push(num) 函数为:a[index] = num; index ++

    pop() 为: index --return a[index];

    empty() 是: 确定索引是否为 “=0”,所以你只需要:

    while( !empty())

  5. 匿名用户2024-01-25

    使用 while 确定堆栈是否为空。

    您可以依次从堆栈中输出几个数字。

  6. 匿名用户2024-01-24

    这是一个浓缩的**,也许你可以这样写来理解它。

    void visit(int e)

    cout<}这里你的堆栈必须是连续的,基点指向低地址,顶点指向高地址,如果它是一个类,那么你必须重构迭代器并重载一个 ++ 方法作为你的基,因为堆栈的定义是从堆栈的顶部访问的,但可以从堆栈的底部访问, 但这颠覆了栈的概念,而且大多数人不会这样做——就程序本身而言,存在某些bug,Big-endian 模式和 small-endian 模式可能是相同的两种情况。

  7. 匿名用户2024-01-23

    这是带有 visit 函数的 stacktra 函数的参数,属于 ** 函数(详见相关信息)。 在这个问题中,不要使用这个参数,它应该是一样的,直接(stacktra(sqstack s)"sqstack s"这个参数对于需要遍历的堆栈来说是必不可少的。 ),然后在 stacktra 函数中调用 visit 函数。

    void(* visit)(int) 这是函数指针的定义(所以也可以是: void (* 只是可读,差):调用时,stacktra(s,v) 会做,函数指针会指向 visit 函数。

    遍历的过程很容易理解:简单来说,如果数组包含n个元素,则从数组的0位置开始,依次访问数组的n-1位置; 在这个问题中,很明显,堆栈是存储数据的向量(数组),base是数组的lo(0); 堆栈的顶部,即数组的 hi(n)

    注意:(top 是一个开放区间,所以没有 = in while,并且数组访问,i.)<一个意思)。

  8. 匿名用户2024-01-22

    3.当用户离开一个任务一段时间后,系统会清理任务中除了rootactivity之外的活动,如果用户回来,就会显示rootactivity,就像用户离开又回来一样,就是放弃之前的事情,重新开始一个新的事情。 以上是默认情况,有一些活动属性可用于控制和修改这些行为。

    alwaysretaintaskstate

    如果任务中根活动的 alwaysRetainTaskState 属性设置为 true,则不会出现上述默认情况,并且该任务即使在一段时间后也会保留所有活动。

    cleartaskonlaunch

    如果任务中根活动的 cleartaskOnLaunch 属性设置为 true,而不是 alwaysretaintaskstate,则系统将立即清理任务中除根活动之外的所有活动,即使它保留了一秒钟。

  9. 匿名用户2024-01-21

    使用循环来确定堆栈的 size() 是否为 0,否则 pop() 将执行一次,直到达到 0。

    pop() 函数删除堆栈的最顶层元素。 如下所示,** 清单并清空堆栈。

    while( !

  10. 匿名用户2024-01-20

    似乎不是。

    您可以编写一个循环来查看堆栈是否每次都是空的。

    如果它不为空,它会弹出

  11. 匿名用户2024-01-19

    您没有内存错误,您访问了未分配的地址。 这是由内存越界、不应写入的内存的越界写入区域引起的。

    内存地址空间只能通过申请来使用,但不仅对你,也对C++运行时使用,它有一些全局变量,包括你的新内存的记录,包括新内存的大小,以及起始地址。 如果越界修改内存,有两种可能:1)可以访问未申请的地址空间,直接报错,2)可以修改未请求的内存地址空间,如C++运行时的全局变量。

    问题的本质是你之前已经越过边界访问了内存空间,所以仔细检查你的**。

  12. 匿名用户2024-01-18

    那你就只能自己写了。

    for (int i = ; i > 0; -i);

  13. 匿名用户2024-01-17

    你上去问,有一个专门的程序员论坛。

  14. 匿名用户2024-01-16

    不,堆栈是一个适配器,接口很少。 底层容器的 deque 或列表具有隐藏的 clear 功能。

  15. 匿名用户2024-01-15

    堆栈的清空操作是将堆栈保留到空为止,你可以这样写,而不必考虑寻找任何模板函数来实现它。

  16. 匿名用户2024-01-14

    根据堆栈中的类型,如果它不是指针,则可以执行此操作(此处使用 int 作为示例)。

    stacks;

    if (!assert(;此时,s 被清空。

  17. 匿名用户2024-01-13

    C++ Stack 是对容器类的改编,它为程序员提供了堆栈的全部功能,——即实现 FILO 数据结构。

    操作:比较和分配堆栈。

    如果堆栈为空,empty() 返回 true。

    pop() 删除堆栈顶部元素。

    push() 将一个元素添加到堆栈的顶部。

    size() 返回堆栈中的元素数。

    top() 返回堆栈顶部元素。

    你可以写你自己的 empty() empty-empty

  18. 匿名用户2024-01-12

    如上所述,对于 C++ 堆栈,pop 是指删除堆栈顶部的元素,而 top 是取出堆栈顶部元素的内容但不删除它。 所以你这里要做的 pop 其实是上面两个操作的组合,所以你应该写 s2[len] = ; 就是这样。 此外,对于字符串,C 样式的字符串类型是 char*,而对于 char* 操作,函数大多以 或 定义,函数多以 str....

    例如,您的 strcmp; C++ 样式是 String 类,定义在 中,String 类有很多现成的方法,只需要 S1 !,就可以比较它们是否相等= s2 可以像其他变量一样写成。

  19. 匿名用户2024-01-11

    pop 没有返回值,先使用 top,然后使用 pop。

    对于字符串变量,strcmp 不能更改为 strcmp(,,can directly s1!)= s2。

  20. 匿名用户2024-01-10

    strcmp 函数的原始形式是 int strcmp(char*,char*),不能传入字符串对象。

  21. 匿名用户2024-01-09

    std::stack 只是一个适配器,需要一个实际的容器(第二个参数)来实现其功能。 此容器必须提供以下功能:

    空大小 后推 弹出 后退堆栈使用 vector 作为底层数据结构 这意味着您对堆栈所做的任何事情都将传输到向量,例如调用堆栈的推送

  22. 匿名用户2024-01-08

    默认情况下,STL 使用的适配器是双端队列,即使用双端队列来实现它,一端是封闭的,只有另一端可以插入和删除。

    当然,您也可以使用列表来执行此操作。

相关回答
9个回答2024-06-08

如果它只是一个局域网,你可以这样做。

1.获取本机 IP 和子网掩码,以便了解局域网上将拥有多少个 IP >>>More

3个回答2024-06-08

没有优雅的方法可以解决它,只是不要像楼上所说的那样使用 print 语句,或者使用 print 函数 (through. >>>More

5个回答2024-06-08

最有效的遍历方法:

for e in : >>>More

13个回答2024-06-08

打开包含文件流的文件,然后它就可以读取处理内容了。

9个回答2024-06-08

A 是一个全局变量,所以谁(任何函数)都可以修改它的值,所以函数 f 对 a 的修改是有效的,即每次 a 都 +1。 >>>More