实验4:栈和队列的基本操作实现及其应用
一、实验目的
1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。
2、 学会使用栈和队列解决实际问题。
二、实验内容
1、 自己确定结点的具体数据类型和问题规模:
分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。
分别建立一个顺序队列和链队列,实现队列的入队和出队操作。
2、 设计算法并写出代码,实现一个十将二进制转换成2进制数。
链栈的实现:
#include
using namespace std;
struct Node{
int data;
Node * next;
};
class LinkStack{
public:
LinkStack(){top=NULL;} //构造函数,初始化一个空栈
~LinkStack();
void Push(int x); //入栈操作,将元素X入栈
int Pop(); //出栈操作,将栈顶元素出栈
int GetTop(){if(top!=NULL)return top->data;} //取栈顶元素(并不删除)
int Empty(){if(top==NULL) return 1;else return 0;} // 判空操作,判断链栈是否为空栈
private:
Node * top; //栈顶指针即链栈的头指针
};
LinkStack::~LinkStack()
{
Node *q;
while(top!=NULL)
{
q=top;
top=top->next;
delete q;
}
}
void LinkStack::Push(int x)
{
Node *s;
s=new Node;s->data=x;
s->next=top;top=s;
}
int LinkStack::Pop()
{
int x;
Node *p;
if(top==NULL)throw"下溢";
x=top->data;p=top;
top=top->next;
delete p;
return x;
}
int main()
{
int x,n,d,flag,tab;
LinkStack S;
flag=0;
do{
cout<<"输入你要的插入的数:"<
>n;
cout<<"是否继续插入(1/0)"<
>d;
S.Push(n);
}
while(d);
cout<
<<"**********链栈的实现**********"<
<
>tab; switch(tab) { case 1:{ cout<
<<"输入你要的插入的数:"<
>x; S.Push(x); break; } case 2: { cout<
<<"删除的数是 :"<
执行结果截图: