实验一一个顺序栈的基本运算实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一一个顺序栈的基本运算实验
一、实验目的:
对一个顺序栈的基本运算进行分析与设计,回顾数据结构所学过的知识,掌握一个顺序栈的基本运算实现,为下一步的实验奠定基础。
二、实验要求:
要求对一个顺序栈的基本运算作设计性实验,并上机运行,撰写实验报告。
三、实验内容:
一个顺序栈的数据类型表示和初始化、进栈、出栈基本运算。
四、实验环境:
Windows XP + VC++6.0开发环境。
五、实验步骤:
1、对顺序栈的知识进行复习,弄清楚栈的算法思想。
2、熟悉顺序栈的几种基本运算,即:
(1)初始化栈
int initStack(sqstack *s)
{/*创建一个空栈由指针S指出*/
if ((s=(sqstack*)malloc(sizeof(sqstack)))= =NULL) return FALSE;
s->top= -1;
return TRUE;
}
(2)入栈操作
int push(sqstack *s, Elemtype x)
{/*将元素x插入到栈s中,作为s的新栈顶*/
if(s->top>=MAXNUM-1) return FALSE; /*栈满*/
s->top++;
s->stack[s->top]=x;
return TRUE;
}
(3)出栈操作
Elemtype pop(sqstack *s)
{/*若栈s不为空,则删除栈顶元素*/
Elemtype x;
if(s->top<0) return NULL; /*栈空*/
x=s->stack[s->top];
s->top--;
return x;
}
(4)取栈顶元素操作
Elemtype gettop(sqstack *s)
{/*若栈s不为空,则返回栈顶元素*/
if(s->top<0) return NULL; /*栈空*/
return (s->stack[s->top]);
}
取栈顶元素与出栈不同之处在于出栈操作改变栈顶指针top的位置,而取栈顶元素操作不改变栈的栈顶指针.
(5)判栈空操作
int Empty(sqstack *s)
{/*栈s为空时,返回为TRUE;非空时,返回为FALSE*/
if(s->top<0) return TRUE;
return FALSE;
}
(6)置空操作
void setEmpty(sqstack *s)
{/*将栈s的栈顶指针top,置为-1*/
s->top= -1;
}
3、上机调试。
源代码如下:
#include
#include
#define MAXNUM 30
#define Elemtype int
/*定义顺序栈的存储结构*/
typedef struct
{
Elemtype stack[MAXNUM];
i nt top;
}SqStack;
/*初始化顺序栈*/
void InitStack(SqStack *p){
if(!p) printf("error");
p->top=-1;
}
/*入栈*/
void Push(SqStack *p,Elemtype x){
if(p->top
e lse printf("Overflow!\n");
}
/*出栈*/
Elemtype Pop(SqStack *p){
Elemtype x;