请教。为什么top 在push()函数中修改后,再次调用还是-1?
发布网友
发布时间:2022-04-23 14:19
我来回答
共1个回答
热心网友
时间:2023-09-15 10:03
里面有一些小错误,比如溢出控制那里,将原来的数组数据赋值到新的数组,那里有错
然后你不应该在类的公有方法里面直接使用这个类对象,这样是不对的。我只是修改了类的一部分,仅供参考,你写到PrintMatchedPairs这个方法里的代码应该写到main函数里面去。
/*
*Author: QCQ
*email: qinchuanqing918@163.com
*created in: 2014/6/7
*/
# include <iostream>
# include <string>
using namespace std;
class SeqStack
{
private:
char *elements;
int top;
int maxsize;
public :
~SeqStack()
{
delete[]elements;
}
SeqStack (int sz)
{
maxsize=sz;
top=-1;
elements=new char[maxsize];
}
/*SeqStack()
{
top++;
}*/
int push(char ch);
char Pop();
char getTop ();
bool IsEmpty() const
{
return (top==-1) ? true :false;
}
int getSize()const
{
return top+1;
}
void makeEmpty()
{
top=-1;
delete []elements;
}
void overflowProcess();
void PrintMatchedPairs();
};
void SeqStack::overflowProcess()
{
char *newArray=new char[maxsize+50];
if(newArray=NULL)
{
cerr<<"chucuo"<<endl;
}
for(int i=0;i<=top;i++)
{
newArray[i]=elements[i];
}
maxsize+=50;
delete []elements;
elements=newArray;
};
int SeqStack::push (char ch)
{
top++;
cout<<"diao yong ";
elements[top]=ch;
cout<<elements[top];
cout<<top;
//SeqStack t;
return top;
}
char SeqStack::Pop ()
{
(IsEmpty()==true)
return NULL;
else
{
cout<<" D YD";
return elements[top--];
}
}
char SeqStack ::getTop()
{
char ch;
if(IsEmpty()==true)return NULL;
return elements[top];
}
为什么栈顶是-1?
因为用一个长度为n的数组顺序储存一个栈然而数组是从0~n-1栈空为top==n那么栈满为top==1。t数组长度固定为n,则可存储n个元素,top=n表示栈空,向栈中插入一个元素后,top-1=n-1,n个元素存储完了就满栈了,top的值就等于0了。
vlookup 的用法
Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击4步自动完成vlookup匹配,无需手写公式,免费使用!
数据结构中,为什么进栈(PUSH)时,置指针TOP=TOP+1栈指针加1,会使指针...
你这种思想就是最容易出现的惯性思维。栈顶可以是最低地址,这样的话,Push的时候要加1。栈顶还可以是最高地址,这样的话Push的时候要减1。具体要看栈顶的相对地址!
为什么栈的初始状态top等于m+1,则说明栈空时top=m+1?
这是因为栈的初始状态是确定的。而栈的初始状态,也就是栈空的状态。所以,如果当栈的初始状态top等于m+1。那栈空时的top就等于m+1了。栈的顺序存储空间为S(1:50),初始状态为top=0。现经过一系列入栈与退栈运算后,top=20,则栈顶-栈底=20-0=20个元素。栈是向上增长的,每次压入一个元...
栈的初态为什么是top=m+1
top是指向最后一个元素上面的那个,所以是m+1 。
c++堆栈中 top() pop()的具体作用是什么
a.pop(); // 1 2a.push(4); // 1 2 4c = a.top(); // c = 4 本回答由电脑网络分类达人 郭强推荐 举报| 答案纠错 | 评论(1) 59 5 其他回答 top()是将指针置于堆栈顶部pop()是从堆栈中提取数据 热心网友| 发布于2013-06-19 举报| 评论(1) 2 17 ...
设栈的存储空间为S(1:m),初始状态为TOP=m+1。经过一系列入栈与退栈操 ...
m+1 。这个栈是从栈顶向栈底压的,一般平时是从栈底向栈顶压,这道题目中是倒过来的。若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出);置TOP=TOP+1(栈指针加1,指向进栈地址);S(TOP)=X,结束(X为新进栈的元素)。
看动画学算法之:栈stack
实际上很多虚拟机的结构都是栈。因为栈在实现函数调用中非常的有效。今天我们一起来看学习一下栈的结构和用法。栈的构成栈一种有序的线性表,只能在一端进行插入或者删除操作。这一端就叫做top端。定义一个栈,我们需要实现两种功能,一种是push也就是入栈,一种是pop也就是出栈。当然我们也可以定义...
push 3是什么意思?
exit(1);s->top++; // 栈顶指针向上移动 s->arr[s->top] = val; // 在栈顶插入新元素 在以上示例中,我们通过定义结构体来表示栈的基本属性,如栈顶指针和存储数据的数组。使用“push”函数将数字3压入栈中,只需要调用以下代码:struct stack s;init_stack(&s);使用“push 3”实现计算机...
利用栈实现逆波兰表达式求值
stack[++top]=i; /*堆栈仍有空间,栈顶指示上移一个位置*/ return 0; } else /*堆栈已满,给出错误信息,返回出错指示*/ { printf("The stack is full"); return ERR; }} 我们在调用函数push时,如果它的返回值为0,说明入栈操作成功;否则,若返回值为ERR(在程序中说明为-1),说明入栈操作失败。3、从...
Array.prototype方法(12)findIndex
如果数组中的某个元素在回调函数被调用之前被删除,那么该元素仍然会被回调函数访问。当回调函数访问到被改变值的元素时,其值将是修改后的值。查找数组方法系列文章:查找数组方法(1):concat 查找数组方法(2):push 查找数组方法(3):pop 查找数组方法(4):unshift 查找数组方法(5):shift ...