概述
实验题目:顺序栈的基本操作
• 实验目的:理解并掌握栈和队列的逻辑结构和存储结构;
• 理解栈和队列的相关基本运算;
• 编程对相关算法进行验证;
学会利用栈和队列解决实际问题
• 实验内容:编写一个程序,实现顺序栈的各种基本运算,并在此基础上设计一个主程序完成如下功能:
• (1)初始化栈s;
• (2)判断栈s是否为空;
• (3)依次进栈元素-1,2,10,-3,5;
• (4)判断栈s是否为空;
• (5)输出栈长度;
• (6)输出从栈顶到栈底的元素;
• (7)输出出栈序列;
• (8)判断栈s是否为空。
头文件
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
#include<string.h>
#include<ctype.h>
#include<malloc.h>
//malloc( )
#include<limits.h>
// INT ,MAX
#include<stdio.h> //EOF,NULL
#include<stdlib.h> //atoi( )
#include<io.h>
//eof( )
#include<math.h>
//floor( ),ceil( ),abs( )
#include<process.h> //exit( )
#include<iostream>
using namespace std;
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
//OVERFLOW 在 math.h 中已定义为3
typedef int Status;
typedef int Boolean; // 布尔类型
//为了操作的方便,建议本书每一个程序都把c1.h包含进去
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define SElemType int
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S);
Status StackEmpty(SqStack &S);//判断是否为空
int StackLength(SqStack &S);//求栈的长度
Status GetTop(SqStack S,SElemType &e);
Status Push(SqStack &S,SElemType e);
Status Pop(SqStack &S,SElemType &e);
Status visit(SElemType c);
Status StackTraverse(SqStack &S);
#endif // STACK_H_INCLUDED
函数构造程序
#include "stack.h"
#include <iostream>
#include <malloc.h>
using namespace std;
Status InitStack(SqStack &S)
{ /* 构造一个空栈S */
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW); /* 存储分配失败 */
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status StackEmpty(SqStack &S)
{ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
if(S.top==S.base)
return TRUE;
else
return FALSE;
}
int StackLength(SqStack &S)
{ /* 返回S的元素个数,即栈的长度 */
return S.top-S.base;
}
Status GetTop(SqStack &S,SElemType &e)
{ /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */
if(S.top>S.base)
{
e=*(S.top-1);
return OK;
}
else
return ERROR;
}
Status Push(SqStack &S,SElemType e)
{ /* 插入元素e为新的栈顶元素 */
if(S.top-S.base>=S.stacksize) /* 栈满,追加存储空间 */
{
S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
exit(OVERFLOW); /* 存储分配失败 */
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{ /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
if(S.top == S.base)
return ERROR;
e = *--S.top;
return OK;
}
Status StackTraverse(SqStack &S)
{
SElemType *p = S.top;
while(p > S.base)
visit(*--p);
cout << endl;
return OK;
}
Status visit (SElemType c)
{
cout << c << " ";
return OK;
}
主程序
#include "stack.h"
#include <iostream>
using namespace std;
int main()
{
SqStack S;
SElemType e;
cout << "①初始化栈S :"<< endl;
InitStack(S);
cout << "②判断栈是否为空 :"<< endl;
if(StackEmpty(S)) cout << "空"<<endl;
else cout <<"不空"<< endl;
cout << "③依次进栈元素是 :-1 2 10 -3 5 ";
Push(S,-1);
Push(S,2);
Push(S,10);
Push(S,-3);
Push(S,5);
cout << endl;
cout << "④判断栈是否为空 :"<< endl;
if(StackEmpty(S)) cout << "空"<<endl;
else cout <<"不空"<< endl;
cout << "⑤输出栈长度: "<< StackLength(S) << endl;
cout << "⑥输出从栈顶到栈底的元素 ";
StackTraverse(S);
cout << "⑦输出出栈序列: ";
for(int i=1;i<=5;i++)
{
Pop(S,e);
cout << e << " ";
}
cout << endl;
cout << "⑧判断S是否为空: "<< endl;
if(StackEmpty(S)) cout << "空"<< endl;
else cout <<"不空"<< endl;
return 0;
}
也可以把三个分程序变成一个C++程序,但是这种分开的更加有分工,更清晰,建议大家这样子使用。
结果截图
最后
以上就是彩色雪碧为你收集整理的顺序栈的基本操作的全部内容,希望文章能够帮你解决顺序栈的基本操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复