实验报告04-顺序栈的基本操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验目的及要求:
了解和掌握顺序栈的特点;
掌握顺序栈基本操作的实现;
要求完成顺序栈的初始化、入栈、出栈、取栈顶元素、显示操作的实现。实验设备环境及要求:
PC机一台,内存要求128M以上,VC++6.0集成开发环境。
实验内容与步骤:
1、在VC++6.0环境中新建一个工程和C++文件;
2、实现顺序栈初始化、入栈、出栈、取栈顶元素算法,代码如下:
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base) return 0;
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return 1;
}
int GetTop(SqStack S,SElemType &e)
{
if(S.top == S.base) return 0;
e = *(S.top-1);
return 1;
}
int Push(SqStack &S,SElemType e)
{
if(S.top-S.base>= S.stacksize){
S.base = (SElemType
*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base) return 0;
S.top = S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++ = e;
return 1;
}
int Pop(SqStack &S,SElemType &e)
{
if(S.top == S.base) return 0;
e = *--S.top;
return 1;
}
void DispStack(SqStack S) //从栈顶到栈底输出元素
{
int i;
if(S.top==S.base)printf("空栈!");
for(i=S.top-S.base; i>0; i--)
printf("%c",S.base[i-1]);
printf("\n");
}
void main()
{
SElemType e;
SqStack S;
InitStack(S);
Push(S,'A');
Push(S,'B');
Push(S,'C');
Push(S,'D');
printf("栈S为:");
DispStack(S);
GetTop(S,e);
printf("栈顶元素是:");
printf("%c\n",e);
Pop(S,e);
printf("栈S为:");
DispStack(S);
}
实验指导与数据处理:
实验结果:栈S为:DCBA
栈顶元素是:D
栈S为:CBA
分析讨论:
本次实验通过对顺序栈基本操作的实现,加深了对顺序栈特点的理解,并且熟悉了VC++6.0集成环境,虽然在调试过程中遇到一些问题,但经分析后达到了预期的结果。