实验二 栈和队列基本操作的实现

加粗样式实验二 栈和队列基本操作的实现

实验目的

1.掌握栈、队列的思想及其存储实现
2.掌握栈、队列基本操作的实现

实验内容

1.编写函数,采用链式存储实现栈的初始化、入栈、出栈操作。
2.编写函数,采用顺序存储实现栈的初始化、入栈、出栈操作。
3.编写函数,采用链式存储实现队列的初始化、入队、出队操作。
4.编写函数,采用顺序存储实现队列的初始化、入队、出队操作。
5.编写一个主函数,在主函数中设计一个简单的菜单,分别调用上述函数。

#include
#include
#include
#include
#include
using namespace std;
#define Status int
#define SElemType int
#define MaxSize 100
#define QElemType int

//菜单
void menu()
{
   
   printf("********1.入栈      2.出栈*********\n");
   printf("********3.退出*********\n");
}

//**************************************顺序栈基本操作函数************************************//
//顺序栈数据结构 
typedef struct Stack
{
   
	SElemType *base;//栈底指针 
	SElemType *top;//栈顶指针 
	int stacksize;//栈可用的最大容量
}SqStack;
//初始化函数
Status InitStack(SqStack &s)
{
   
	s.base=new SElemType[MaxSize];//动态分配最大容量
	if(!s.base)
	{
   
		printf("分配失败\n");
		return 0;
	}
	s.top=s.base;//
	s.stacksize=MaxSize;
	return 1;
}
//入栈
Status Push(SqStack &s,SElemType e)
{
   
	if(s.top-s.base==s.stacksize) return 0;//栈满
	*(s.top++)=e;//先压栈再++ 
	return 1;	
}
//出栈 用e返回值
Status Pop(SqStack &s,SElemType &e)
{
   
	if(s.top==s.base) return 0;//栈空
	e=*--s.top;//先减减 指向栈顶元素,再给e
	return 1;	
}

//********************************功能实现函数**************************************//
//入栈功能函数 调用Push函数
void PushToStack(SqStack &s)
{
   
	int n;SElemType e;int flag;
	printf("请输入入栈元素个数(>=1):\n");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
   
	 printf("请输入第%d个元素的值:",i+1);
	 scanf("%d",&e);
	 flag=Push(s,e);
	 if(flag)printf("%d已入栈\n",e);
	 else {
   printf("栈已满!!!\n");break;}
	}
}
//出栈功能函数 调用Pop函数
void PopFromStack(SqStack &s)
{
   
	int n;SElemType e;int flag;
	printf("请输入出栈元素个数(>=1):\n");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
   
	 flag=Pop(s,e);
	 if(flag)printf("%d已出栈\n",e);
	 else {
   printf

你可能感兴趣的:(数据结构,数据结构,c语言,c++)