实验三 栈和队列的基本操作实现及其应用

一、实验目的

1、   熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。

2、      学会使用栈和队列解决实际问题。

二、实验内容

1、自己确定结点的具体数据类型和问题规模:

分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。

分别建立一个顺序队列和链队列,实现队列的入队和出队操作。

2、设计算法并写出代码,实现一个十进制数转换成二进制数。

三、代码
顺序栈
#include
using namespace std;
const int StackSize=10;
class SeqStack
{
public:
	SeqStack();
	~SeqStack(){}
	void Push(int x);
	int Pop();
	int getTop();
	int Empty();
private:
	int data[StackSize];
	int top;
};
SeqStack::SeqStack()
{top=-1;}
void SeqStack::Push(int x)
{
	if(top==StackSize-1) throw"上溢";
	top++;
	data[top]=x;
}
int SeqStack::Pop()
{
	int x;
	if(top==-1) throw"下溢";
	x=data[top--];
	return x;
}
int SeqStack::getTop()
{
	if(top!=-1)
		return data[top];
}
int SeqStack::Empty()
{
	if(top==-1) return 1;
	else return 0;
}
void main()
{
	SeqStack s;
	if(s.Empty())
		cout<<"栈为空"<
实验三 栈和队列的基本操作实现及其应用_第1张图片
链栈
#include
using namespace std;
struct node
{
	int data;
	node *next;
};
class SeqStack
{
public:
	SeqStack(){top=NULL;}
	~SeqStack(){}
	void Push(int x);
	int Pop();
	int getTop(){if(top!=NULL)return top->data;}
	int Empty();
private:
	node *top;
};
void SeqStack::Push(int x)
{
	node *s;
	s=new node;s->data=x;
	s->next=top;top=s;
}
int SeqStack::Pop()
{
	int x;
	node *p;
	if(top==NULL) throw"下溢";
	x=top->data;p=top;
	top=top->next;
	delete p;
	return x;
}
int SeqStack::Empty()
{
	if(top==NULL) return 1;
	else return 0;
}
void main()
{
	SeqStack S;
	if(S.Empty())
		cout<<"栈为空"<
实验三 栈和队列的基本操作实现及其应用_第2张图片
顺序队列
#include
using namespace std;
const int QueueSize=100;
class CirQueue
{
public:
	CirQueue(){front=rear=QueueSize-1;}
	~CirQueue(){}
	void Enqueue(int x);
	int DeQueue();
	int GetQueue();
	int Empty();
private:
	int data[QueueSize];
	int front,rear;
};
void CirQueue::Enqueue(int x)
{
	if((rear+1)%QueueSize==front) throw"上溢";
	rear=(rear+1)%QueueSize;
	data[rear]=x;
}
int CirQueue::DeQueue()
{
	if(rear==front) throw"下溢";
	front=(front+1)%QueueSize;
	return data[front];
}
int CirQueue::GetQueue()
{
	int i;
	if(rear==front) throw"下溢";
	i=(front+1)%QueueSize;
	return data[i];
}
int CirQueue::Empty()
{
	if(front==rear)
		return 1;
	else
		return 0;
}
void main()
{
	CirQueue c;
	if(c.Empty())
		cout<<"队列为空"<
实验三 栈和队列的基本操作实现及其应用_第3张图片
链队列
#include
using namespace std;
struct node
{
	int data;
	node *next;
};
class LinkQueue
{
public:
	LinkQueue();
	~LinkQueue();
	void EnQueue(int x);
	int DeQueue();
	int GetQueue();
	int Empty();
private:
	node *front,*rear;
};
LinkQueue::LinkQueue()
{
	node *s=NULL;
	s=new node;
	s->next=NULL;
	front=rear=s;
}
LinkQueue::~LinkQueue()
{
	node *p=NULL;
	while(front!=NULL)
	{
		p=front->next;
		delete front;
		front=p;
	}
}
void LinkQueue::EnQueue(int x)
{
	node *s=NULL;
	s=new node;
	s->data=x;
	s->next=NULL;
	rear->next=s;rear=s;
}
int LinkQueue::DeQueue()
{
	node *p=NULL;
	int x;
	if(rear==front)throw"下溢";
	p=front->next;
	x=p->data;
	front->next=p->next;
	if(p->next==NULL) rear=front;
	delete p;
	return x;
}
int LinkQueue::GetQueue()
{ 
	if(front!=rear)
		return front->next->data;
}
int LinkQueue::Empty()
{
	if(front==rear)
		return 1;
	else
		return 0;
}
void main()
{
	LinkQueue l;
	if(l.Empty())
		cout<<"队列为空"<
实验三 栈和队列的基本操作实现及其应用_第4张图片
十进制转换为二进制
#include
using namespace std;
struct node
{
	int data;
	node *next;
};
class SeqStack
{
public:
	SeqStack(){top=NULL;}
	~SeqStack(){}
	void Push(int x);
	int Pop();
private:
	node *top;
};
void SeqStack::Push(int x)
{
	node *s;
	s=new node;s->data=x;
	s->next=top;top=s;
}
int SeqStack::Pop()
{
	int x;
	node *p;
	if(top==NULL) throw"下溢";
	x=top->data;p=top;
	top=top->next;
	delete p;
	return x;
}
int main()
{
	int n,a,b,length=0;
	cout<<"请输入一个十进制整数:"<>n;
	a=n;
	SeqStack s1;
	while(a!=0)
	{
		b=a%2;//取余
		a=a/2;//取商
		s1.Push(b);//余数依次入栈
		length++;
	}
	try{
		cout<<"其二进制为: "<

四、实验心得
    这次实验难度不大, 相互之间都有相似性, 只是内容有点多。





你可能感兴趣的:(实验三 栈和队列的基本操作实现及其应用)