实验目的
掌握栈的结构特性及其栈的相关操作。
实验内容和要求
要求实现栈的操作集。
函数接口定义
Status InitStack(SqStack &S);
Status Push(SqStack &S,SElemType e);
Status Pop(SqStack &S,SElemType &e);
Status GetTop(SqStack S,SElemType &e);
Status StackEmpty(SqStack S);
void Conversion();//输入任意一个非负整数,输出与其等值的八进制数
LinkList结构定义如下:
typedef struct SqStack
{
SElemType *top;
SElemType *base;
int stacksize;
}SqStack;
测试程序样例
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#include "lab3.h"
using namespace std;
int main()
{
char a;
Conversion();
}
/* 你的代码将被嵌在这里 */
void Conversion(){
SqStack S;
int N,M;
InitStack(S);
printf("请输入一个非负十进制整数:\n");
scanf("%d",&N);
if(N<0)
{
printf("请重新输入一个非负十进制整数:\n");
scanf("%d",&M);
N=M;
}
while(N)
{
Push(S,N % 8);
N =N/8;
}
printf("输出与其值相等的八进制数:\n");
while(!StackEmpty(S)){
SElemType e;
Pop(S,e);
printf("%d ",e);
}
}
输出样例
代码
(2个函数的实现)
Status InitStack(SqStack &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 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)exit(OVERFLOW);
S.top =S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top ++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.top == S.base)return ERROR;
e= * --S.top;
return OK;
}
Status GetTop(SqStack S,SElemType &e)
{
if(S.top ==S.base)return ERROR;
e= *(S.top-1);
return OK;
}
Status StackEmpty(SqStack S)
{
if(S.top==S.base)
return OK;
else return ERROR;
}