求大神解释入栈 出栈 主函数的每条代码
发布网友
发布时间:2022-05-30 05:11
我来回答
共1个回答
热心网友
时间:2023-10-09 23:56
//你明确说一下哪里不明白 注释还可以啊
#include<iostream>
using namespace std;
class IntStack{ //整数栈类
public:
virtual void push(int)=0; //入栈
virtual int pop()=0; //出栈并返回出栈元素
virtual int topElement()const=0; //返回栈顶元素,但不出栈
virtual bool isEmpty()const=0; //判断是否栈空
};
class SeqStack: public IntStack{
int data[100]; // 存放栈元素的数组
int top; // 栈顶元素的下标
public:
//**********found**********
SeqStack():top(-1){} // 把top初始化为-1表示栈空
void push(int n){ data[++top]=n; } //下标+1 压入栈 这里没什么难得吧。
//**********found**********
int pop(){ return data[top--]; } //同样 先取栈顶元素,然后下标-1
int topElement()const{ return data[top]; } //取栈顶元素
bool isEmpty()const{ return top==-1; } //判断是否为空
};
struct Node{
int data;
Node *next;
};
class LinkStack: public IntStack{
Node *top;
public:
//**********found**********
LinkStack(): top(NULL){} // 把top初始化为NULL表示栈空
void push(int n){
Node *p=new Node; //new一个新Node
p->data=n; //将n赋值给值域
//**********found**********
p->next=top; //将p的指针域指向top
top=p; //将top指向p 采用的头插法
}
int pop(){
int d=top->data;; //这里先取栈顶的元素
top=top->next; //top指针略过栈顶的元素 下一个元素成为栈顶元素 //这里做法不严谨 需要把节点的内存释放掉
return d;
}
int topElement()const{ return top->data; }
bool isEmpty()const{ return top==NULL; }
};
void pushData(IntStack &st){
st.push(8);
st.push(1);
st.push(3);
st.push(6);
st.push(4);
}
void popData(IntStack &st){
while(!st.isEmpty()) cout<<st.pop()<<' '; //不为空一直pop
}
int main(){
SeqStack st1; pushData(st1); popData(st1); //两个测试函数 把数据压栈 然后出栈。。
cout<<endl;
LinkStack st2; pushData(st2); popData(st2);
cout<<endl;
return 0;
}
追问再麻烦一下, p->data=n; //将n赋值给值域是什么意思?
追答。。。就是 结点一般有一个 存数据的地方 一个 指针 数据的地方 就叫值域