c - 如何移除不在栈顶的元素?

标签 c data-structures stack

这是我的代码:

void removeOddValues(Stack *s)
{
    Stack *odd = (Stack*)malloc(sizeof(Stack));
    odd->ll.head = NULL;
    odd->ll.size = 0;

    while(s->ll.head->item % 2 == 0){
        push(odd, s->ll.head->item);
    }
    pop(s);

    while(!isEmptyStack(odd)){
        push(s, odd->ll.head->item);
        pop(odd);
    }
    free(odd);
}

如何删除堆栈中间的元素?

最佳答案

栈只能从末尾访问,所以从栈中间移除项的算法需要第二个栈来临时存储数据:

  1. 从 Stack One 中弹出一个项目
  2. 如果您想保留该元素,请将其插入第二堆
  3. 重复第 1 步和第 2 步,直到第一个堆栈为空
  4. 从堆栈二中弹出一个项目并将其插入堆栈一
  5. 重复第 4 步,直到堆栈二为空

关于c - 如何移除不在栈顶的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47035551/

相关文章:

dom - NodeList是如何实现的?

algorithm - 为快速游戏重复配对一组用户的最有效方法

java - 在 Java 中推断方法的堆栈内存使用

c - VS2019 linux头文件

c - 如何声明外部结构?

c - 关于返回值的基本 C 问题

java - 我该怎么做才能获取堆栈的元素并将它们添加到单个链表中?

c - 如何创建一个代表c数组的 `ffi_type`?

c# - 循环 IEnumerable

c - 定时数组静态数组分配与 C 中堆栈上的数组