顺序栈的各种基本运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

顺序栈的各种基本运算实验内容与要求:

编写一个程序,实现顺序栈的各种基本运算,并在基础上完成以下功能:

1)初始化顺序栈;

2)判断顺序栈是否为空;

3)依次进栈元素a,b,c,d,e;

4)判断顺序栈是否为空;

5)输出栈长度;

6)输出从栈顶到栈底的元素;

7)读出栈顶元素;

8)删除栈顶元素;

9)输出从栈顶到栈底的元素;

10)判断顺序栈是否为空;

11)释放栈。

代码如下:

#include

#include

#include

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define NULL 0

#define OVERFLOW -2

typedef int Status;

typedef char SElemType;

Status visit(SElemType e);

#define STACK_INIT_SIZE 100 // 栈存储空间的初始分配量

#define STACKINCREMENT 10 // 存储空间分配增量

typedef struct {

SElemType *base; // 存储数据元素的数组

SElemType *top; // 栈顶指针

int stacksize; // 当前分配的栈空间大小,以sizeof(SElemType)为单位}SqStack;

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;

}// InitStack

Status DestroyStack (SqStack &S) {

// 销毁栈S

free(S.base);

S.base=NULL;

S.top=NULL;

S.stacksize=0;

return OK;

}// DestroyStack

Status StackEmpty (SqStack S) {

// 判断栈S是否为空

if(S.top==S.base)

return TRUE;

else

return FALSE;

}// StackEmpty

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;

}// Push

int StackLength (SqStack S) {

// 返回S的元素个数,即栈的长度

return S.top-S.base;

}// StackLength

Status GetTop (SqStack S, SElemType &e) {

// 若栈不空,则用e返回S的栈顶元素

if(S.top==S.base) return ERROR;

e = *(S.top-1);

return OK;

}// GetTop

Status Pop (SqStack &S, SElemType &e) {

// 若栈不空,则删除S的栈顶元素

if(S.top==S.base) return ERROR;

e= * --S.top;

return OK;

}// Pop

Status StackTraverse (SqStack S, Status( *visit)(SElemType)) { // 遍历栈

while(S.top!=S.base)

visit(*--S.top);

return OK;

}// StackTraverse

void main() {

// 主函数

SElemType e;

SqStack S;

printf("(1)初始化顺序栈。\n");

InitStack(S);

printf("(2)判断顺序栈是否为空:\n");

StackEmpty(S);

printf("(3)依次进栈元素a,b,c,d,e:\n");

Push(S,'a');

Push(S,'b');

Push(S,'c');

Push(S,'d');

Push(S,'e');

printf("(4)判断顺序栈是否为空:\n");

StackEmpty(S);

printf("(5)输出栈长度:%d\n",StackLength(S));

printf("(6)输出从栈顶到栈底的元素:\n");

StackTraverse(S,visit);

printf("(7)读出栈顶元素:%d\n",GetTop(S,e));

printf("(8)删除栈顶元素:%d\n",Pop(S,e));

相关文档
最新文档