标签: stack

我在Java Stack类中发现了一个错误吗?为什么这两个堆栈元素不一样?

我使用Java Stack遇到了一个非常棘手的问题.

Stack<Integer> s=new Stack(), ss=new Stack();
s.push(1024);  ss.push(1024);
System.out.println(s.peek());
System.out.println(ss.peek());
System.out.println((s.peek()==ss.peek()));
System.out.println((s.peek()<ss.peek()));
System.out.println((s.peek()<=ss.peek()));
System.out.println((s.peek()!=ss.peek()));
Run Code Online (Sandbox Code Playgroud)

见上面的代码.但为什么输出是这样的?

1024
1024
false
false
true
true
Run Code Online (Sandbox Code Playgroud)

这是Java中的错误吗?有人帮忙....谢谢,凯

java stack peek

0
推荐指数
1
解决办法
79
查看次数

基本堆栈中的内存泄漏

我正在研究一个真正简单的堆栈实现,我似乎无法弄清楚为什么我有内存泄漏.我对代码的期望是在push()中分配了5个节点,在displayAndDestroy()中释放了5个节点.但是Valgrind说我已经分配了6个节点的数据并且只释放了5个.我一直在盯着这个,我不确定我哪里出错了.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct STACK{
    char data[100];
    struct STACK *next;
} stack;

stack *push( stack *oldTop, char *data )
{
    stack *newTop = malloc(sizeof(stack));
    newTop->next = oldTop;

    if(!data){
        strcpy(newTop->data, newTop->next->data);
    } else{
        strcpy(newTop->data, data);
    }

    return( newTop );
}

void displayAndDestroy( stack *top )
{
    stack *currentTop = top;
    stack *temp;

    int i=0;
    while(currentTop){

        printf("stack%d: %s\n", i, currentTop->data );

        temp = currentTop->next;
        free(currentTop);
        currentTop = temp;

        i++;
    }
}

stack *initializer( stack *top, char *fileName …
Run Code Online (Sandbox Code Playgroud)

c stack

0
推荐指数
1
解决办法
125
查看次数

为什么这段代码会产生seg错误?

我有类stackLL和pop()函数在main中使用时会创建一个seg错误.这是代码:这是结构和类定义:

struct llNode{
int data;
llNode* next;
};

class stackLL{
public:
stackLL();
void push(int x);
int pop();
void print();

private:
llNode* head;
};
Run Code Online (Sandbox Code Playgroud)

这是成员函数定义:

int stackLL::pop(){
    if (head == NULL){
    return false;
    }

    else {
    llNode *tmp= new llNode;
    cout<<"The integer is: "<<head -> data;
    tmp = head;
    head = tmp -> next;
    delete tmp;
    return tmp -> data;

    }
}
Run Code Online (Sandbox Code Playgroud)

这是main中的实现:

stackLL sll;
Run Code Online (Sandbox Code Playgroud)

情侣线

 sll.pop();
Run Code Online (Sandbox Code Playgroud)

c++ stack linked-list

0
推荐指数
1
解决办法
68
查看次数

堆配置抽象类

我想知道为什么我不能将一个抽象对象数组初始化到堆栈而不是堆.

这里有一些类似于我的C++代码在最后一行失败了.我主要只是对处理堆与堆栈的问题背后的原因感到好奇.提前致谢!

#define ARRAY_SIZE 10

class Obj {
public:
    virtual void fn() =0;
};

class Sub : public Obj {
public:
    void fn() {
        // ...
    }
};

Obj * o1_array[ARRAY_SIZE];
Obj * o2_array = new Obj[ARRAY_SIZE]; // Compiler Error
Run Code Online (Sandbox Code Playgroud)

c++ heap stack

0
推荐指数
1
解决办法
249
查看次数

我可以将数据推送/弹出到GCC C返回堆栈吗?

在GCC C中,有没有办法将数据推送/弹出到C返回堆栈?

我不是在谈论实现自己的堆栈(我知道如何做到这一点); 我的意思是使用现有的C返回堆栈来显式推送/弹出参数(当然,在同一级别的大括号​​内).

例如,类似于:

extern int bar;

void foo(void) {
  PUSH(bar);

  bar = 12;
  doSomething(); // that depends on the value of bar

  bar = POP();   // restore original value of bar
}
Run Code Online (Sandbox Code Playgroud)

如果有任何简单的方法可以做到这一点,我认为这将是一个更明确的替代方案,明确使用像"oldBar"这样的局部变量.

c stack gcc

0
推荐指数
1
解决办法
245
查看次数

为什么D不允许在堆栈上创建对象?

考虑以下程序(请参阅此处的实时演示)

import std.stdio;
class myclass
{
    public:
    int get_a()
    {
        return a;
    }
    private:
    int a=3;
}
int main()
{
    myclass m;  // It should be myclass m=new myclass();
    writefln("%d",m.get_a());   
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C++支持自动(堆栈分配)和动态(堆分配)对象.但为什么每个类对象必须在D中动态分配?为什么D不支持堆栈分配的对象?

另一个令人惊讶的事情是,ideone编译器错误为:

prog.d(14): Error: null dereference in function _Dmain
Run Code Online (Sandbox Code Playgroud)

但是当我在dmd2编译器上的本地机器上尝试它时,它给了我运行时错误而不是编译时错误.为什么?为什么这个程序的行为有所不同?以下是我在dmd2给出的本地机器上的错误.

object.Error@(0): Access Violation
----------------
0x00402056
0x00405F9B
0x00405EB1
0x00403D93
0x7651EE6C in BaseThreadInitThunk
0x7758377B in RtlInitializeExceptionChain
0x7758374E in RtlInitializeExceptionChain
Run Code Online (Sandbox Code Playgroud)

heap stack d class object

0
推荐指数
1
解决办法
142
查看次数

如何清空列表

我试图找出在Common Lisp中清空列表(看作堆栈)的方法.

我想出了这个:

(defun emptystack ()
    (dolist (var *stack*) (pop *stack*)))
Run Code Online (Sandbox Code Playgroud)

但它在编译时生成警告(VAR已定义但从未使用过).

然后我认为这样做会更简单:

(setq *stack* nil)
Run Code Online (Sandbox Code Playgroud)

但是,我仍然想知道是否有任何方法像第一个函数那样手动完成,但没有任何未使用的变量.

lisp stack common-lisp

0
推荐指数
2
解决办法
92
查看次数

使用双链表实现std :: stack吗?

我曾经有一位教授告诉我,这std::stack通常是使用双链表实现的,如果您只需要访问顶部,这将是多余的.

他的结论是用一个std::vector或一个链表实现的用户定义的堆栈结构可以节省内存空间.

无论哪种方式,我都可能使用STL版本(没有浪费精力),但std::stack真的浪费了这样的记忆吗?

c++ stack stl linked-list doubly-linked-list

0
推荐指数
1
解决办法
158
查看次数

预测C代码的输出

我参加了一个代码编写的面试,我不得不预测代码的输出.

int foo() {
  int a;
  a = 5;
  return a;
}

void main() {
  int b;
  b = foo();
  printf ("The returned value is %d\n", b);
}
Run Code Online (Sandbox Code Playgroud)

答案对我来说是如此明显,我回答了5.但是面试官说答案是不可预测的,因为函数会在返回后从堆栈中弹出.有人可以在此澄清我吗?

c stack

0
推荐指数
1
解决办法
101
查看次数

如何在STL中实现Stack?

我遇到了这个:

标准C ++容器

这引发了我一个问题,即如何在STL中实现堆栈?

我正在寻找类似于以下内容的描述:

C ++ std :: vector如何实现?

STL中真正的双端队列是什么?

c++ implementation stack stl

0
推荐指数
2
解决办法
4599
查看次数

标签 统计

stack ×10

c++ ×4

c ×3

heap ×2

linked-list ×2

stl ×2

class ×1

common-lisp ×1

d ×1

doubly-linked-list ×1

gcc ×1

implementation ×1

java ×1

lisp ×1

object ×1

peek ×1