qq_慕婉清0378487
2019-07-15
?是因为越界了
宝慕林2301194
2018-07-30
调试一下,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
萧容羽
2018-04-15
放多点代码上来,你这个问题应该不是错在demo里面
慕前端0711973
2018-03-16
看下这个变量什么时候定义好,作用域是什么
慕粉2359383080
2018-02-13
因为你结果显示栈长度是4,所以pop应该是正确的,多一个o应该是你多输出了一个o,你检查一下能输出elem的语句是不是两个,造成重复输出。另外你可以展示一下你的代码,看到你的代码才能准确的告诉你原因
之恒zahen
2018-02-11
检查是否在头文件中声明,是否在编译中有对应的obj文件
qq_袮D影孑_03909390
2017-10-01
栈底没有指向,栈顶这时的值为1,但也不能说栈顶指向他,这又不是指针。
可以说栈顶只是记录了这个栈的元素个数。
但这时通过栈顶的值可以访问到它。
死咸鱼
2017-08-10
因为队列篇举例的是环形队列,队头和队尾指向的位置一旦超过队的容量,就指向了初始位(0位)。例如:4个位置(0~3)的队列,现在队头在1位置,队尾在3位置,此时再来一个元素,队尾只能移到0位置,即(3+1)%4=0的位置。出队时队头位置的变化情况也是一样的。而栈的情况和环形队列不同,数据存储是按直线形式的,在元素入栈和出栈时不会出现环形队列指针位置变化的情况,下标不用取余。
qq_梦依凡_04310413
2016-10-29
根据老师写了一个整个的程序,这个是申请物理空间的,因为物理空间很大一般不会不足,符合你的问题,所以可以按需要取多少大小。
不是很规范,有所不足互相学习哈
#include<iostream>
using namespace std;
#define elemtype char
struct node {
elemtype data;
node *last;
node *next;
//新定义的结点的默认构造函数
node(const elemtype data = 0,node *last = NULL,node *next = NULL) {
this->data = data;
this->last = last;
this->next = next;
}
~node() {
data = 0;
last = next = NULL;
}
};
class stack{
private:
node *base; //栈底
node *top; //栈顶
int size; //栈的实际大小
public:
stack() {
//申请一个哨兵结点作为栈底,哨兵的data没有意义
//如果申请物理空间失败,抛出异常
if (!(base = new node())) {
cout << "内存不足!";
//throw ...
}
top = base;
size = 0;
}
~stack() {
node *p=base,*q=NULL;
while(p) {
q = p;
p = p->next;
delete q;
}
}
bool isfull() {
//尝试申请一个node,如果可以申请说明未满
node *p=new node;
if (!p) {
return true;
}
else {
delete p;
return false;
}
}
bool isempty() {
return !size;
//也可以写成 return top == base;
}
void push(const elemtype &c) {
if (isfull()) {
cout << "满了";
//throw ..
}
node *p = new node(c);
top->next = p;
p->last = top;
top = p;
++size;
}
elemtype pop() {
if (isempty()) {
cout << "空了";
//theow ..
}
elemtype x = top->data;
node *p = top;
top = p->last;
top->next = NULL;
delete p;
--size;
return x;
}
//遍历函数,默认从栈底到栈顶
void traverse(bool isfrombottom = true) {
node *p;
if (isfrombottom) {
p = base->next;
while (p) {
cout << p->data;
p = p->next;
}
cout<<endl;
}
else {
p = top;
while (p != base) {
cout << p->data;
p = p->last;
}
cout<<endl;
}
}
int lenth() {
return size;
}
void clearStack() {
node *p = base->next,*q;
while (p) {
q = p;
p = p->next;
delete q;
}
top = base;
size = 0;
base->next = NULL;
}
};
int main(void) {
stack *s = new stack();
if (s->isempty())
cout<<"栈为空"<<endl;
cout << s->lenth()<<endl;
s->push('h');
s->push('e');
s->push('l');
s->push('l');
s->push('o');
cout << s->lenth()<<endl;
s->traverse();
s->traverse(false);
s->clearStack();
cout << s->lenth()<<endl;
cout <<endl;
s->push('a');
s->traverse();
s->pop();
s->traverse();
//测试是不是能二次入栈
s->push('a');
s->traverse();
s->pop();
s->traverse();
//因为内存物理空间蛮大的,所以一般栈满的情况不会出现 在此不做测试
//if (s->isfull())
//cout<<"栈为满"<<endl;
s->clearStack();
//最后这句话送给大家
s->push('H');
s->push('a');
s->push('p');
s->push('p');
s->push('y');
s->push(' ');
s->push('C');
s->push('h');
s->push('r');
s->push('i');
s->push('s');
s->push('t');
s->push('m');
s->push('a');
s->push('s');
s->push('!');
s->traverse();
delete s;
return 0;
}
风吹风的
2016-07-13
不惧亢龙
2016-05-06
明白了,一个是对象一个是成员
240173099
2016-04-30
最后应该写成delete pStack;,
我看你写成delete []pStack;
看来你和我一样,一开始以为这个是五个长度的数组了所以加了[]
试试吧,我改过这个就对了
吴樟
2016-04-26
给elem赋了一个初值,初值为ASCII值为0的字符。而pop()出‘o’,是因为当前栈顶元素是‘o’,进行出栈操作就会弹出栈顶元素‘o’。