java顺序存储结构_顺序栈存储结构

实现了一下顺序栈,文件是分开调用的

StartDefine.h文件

/**********************************************

文件位置:1 绪论\StartDefine

文件名称:StartDefine

文件类型:.h

文件内容:相关宏函数以及结果状态码的定义

**********************************************/

//#ifndef STARTDEFINE_H

//#define STARTDEFINE_H

//函数头文件

#include

#include

#include

#include

#include

#include

//函数结果状态代码

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int Status;

//#endif

SequenceStack.h文件

/**************************************

文件位置:3 栈和队列\SequenceStack

文件名称:SequenceStack

文件类型:.h

实现功能:栈的顺序存储结构

***************************************/

//#ifndef SEQUENCESTACK_H

//#define SEQUENCESTACK_H

#define STACK_INIT_SIZE 100//初始分配量

#define STACK_INCREMENT 10 //分配增量

typedef struct

{

SElemType *base;//栈底指针,构造栈和销毁栈之后,base的值都为null

SElemType *top;//栈顶指针,指向栈顶元素的下一个位置

int stacksize;//当前已分配的存储空间,以元素为单位

}SqStack;

//构造一个新的空栈 S

Status InitStack(SqStack &S);

//销毁栈S,S不再存在

Status DestroyStack(SqStack &S);

//把S设为空栈

Status ClearStack(SqStack &S);

//判断栈是否为空

Status StackEmpty(SqStack &S);

//返回栈中元素个数

int StackLength(SqStack S);

//用e返回栈顶元素

Status GetTop(SqStack S,SElemType &e);

//插入元素e为新的栈顶元素

Status Push(SqStack &S,SElemType e);

//删除栈顶元素,并用e返回其值

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

//对栈中每个元素调用函数visit(),一旦失败则操作失败

Status StackTraverse(SqStack S,void(*visit)(SElemType));

//#endif

SequenceStack.cpp文件

/**************************************

文件位置:3 栈和队列\SequenceStack

文件名称:SequenceStack

文件类型:cpp文件

实现功能:顺序栈相关函数基本操作

***************************************/

//#ifndef SEQUENCESTACK_C

//#define SEQUENCESTACK_C

//#include"SequenceStack.h"

//构造一个新的空栈 S

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;

}

//销毁栈S,S不再存在

Status DestroyStack(SqStack &S){

if(!S.base) return ERROR;//栈未建立

free(S.base);//回收栈空间

S.base=S.top=NULL;//区别置空

S.stacksize=0;

return OK;

}

//把S设为空栈

Status ClearStack(SqStack &S){

if(!S.base) return ERROR;

S.top=S.base;

return OK;

}

//判断栈是否为空

Status StackEmpty(SqStack &S){

if(S.base==S.top)

return OK;

else

return ERROR;

}

//返回栈中元素个数

int StackLength(SqStack S){

return S.top-S.base;

}

//用e返回栈顶元素

Status GetTop(SqStack S,SElemType &e){

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

e=*(S.top-1);

return OK;

}

//插入元素e为新的栈顶元素

Status Push(SqStack &S,SElemType e){

if(S.top-S.base>=S.stacksize){

S.base=(SElemType*)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));

if(!S.base) exit(OVERFLOW);//存储分配失败

S.top=S.base+S.stacksize;

S.stacksize+=STACK_INCREMENT;

}

*S.top++=e;

return OK;

}

//删除栈顶元素,并用e返回其值

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

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

e=*--S.top;

return OK;

}

Status StackTraverse(SqStack S,void(*visit)(SElemType)){

SElemType *p=S.base;

while(p

visit(*p++);

return OK;

}

//#endif

SequenceStack-Test.cpp文件

/**************************************

文件位置:3 栈和队列\SequenceStack

文件名称:SequenceStack-Test cpp文件

实现功能:顺序栈相关函数的测试

***************************************/

typedef int SElemType;

#include"..\..\1 绪论\StartDefine\StartDefine.h"

#include"SequenceStack.h"

#include"SequenceStack.cpp"

int main(){

SqStack S;

int i;

SElemType e;

void PrintElem(SElemType e);

printf("函数InitStack测试……\n");

printf("初始化顺序栈S…\n");

InitStack(S);

printf("\n");

printf("函数StackEmpty测试……\n");

StackEmpty(S)?printf("S为空!!!\n"):printf("S不为空!!!\n");

printf("\n");

printf("函数Push测试……\n");

for(i=1;i<=6;i++){

printf("将\"%d\"压入栈S",2*i);

Push(S,2*i);

printf("(累计第%d个元素)\n",S.top-S.base);

}

printf("\n");

printf("函数StackTraverse测试……\n");

StackTraverse(S,PrintElem);

printf("\n\n");

printf("函数Pop测试……\n");

Pop(S,e);

printf("栈顶元素\"%d\"出栈\n",e);

printf("S中的元素为:S=");

StackTraverse(S,PrintElem);

printf("\n\n");

printf("函数Stacklength测试……\n");

printf("S的长度为%d\n",StackLength(S));

printf("\n");

printf("函数GetTop测试……\n");

GetTop(S,e);

printf("栈顶元素的值为\"%d\"\n",e);

printf("\n");

printf("函数ClearStack测试……\n");

printf("清空S前:");

StackEmpty(S)?printf("S为空!!!\n"):printf("S不为空!!!\n");

ClearStack(S);

printf("清空S后:");

StackEmpty(S)?printf("S为空!!!\n"):printf("S不为空!!!\n");

printf("\n");

printf("函数DestroyStack测试……\n");

printf("销毁S前:");

S.base!=NULL&&S.top!=NULL?printf("S为空!!!\n"):printf("S不为空!!!\n");

DestroyStack(S);

printf("销毁S前:");

S.base!=NULL&&S.top!=NULL?printf("S为空!!!\n"):printf("S不为空!!!\n");

printf("\n");

return 0;

}

//定义一个输出函数

void PrintElem(SElemType e){

printf("%d ",e);

}

后续的再更新……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值