顺序栈的初始化

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

顺序栈的初始化

#include <stdio.h>

#include <stdlib.h>

#include<malloc.h> // malloc( ),alloc( ),realloc( )等

#include<ctype.h>

#include<process.h> // exit(n)

#include<time.h>

#define SElemType int //数据元素的类型

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define STACK_INIT_SIZE 100 /*顺序栈存储空间初始分配量*/

#define STACKINCREMENT 10 /*顺序栈存储空间分配增量*/

typedef int Status; // Status是函数的类型,其值是函

数结果状态代码,如OK等

typedef int Boolean; // Boolean是布尔类型,其值是TRUE 或FALSE

typedef struct

{ SElemType *base; /*栈顶指针*/

SElemType *top; /*栈底指针*/

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

}SqStack; /*顺序栈类型定义*/

//----------------------------------------------------------------------------------

void main()

{

printf("\n\n\t\t\t数据结构(实验二)");

void m(SqStack S);

void p(SqStack S);

Status InitStack(SqStack &S);

Status Push (SqStack &S, SElemType e);

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

//(一)初始化栈

SqStack S;

InitStack(S);

if(InitStack(S))

printf("\n(一)顺序表初始化成功!!!\n\n"); else

printf("(一)顺序表初始化失败!!!\n\n"); p(S);

//(二)将一个数插在栈顶

int e;

printf("\n\n请输入要插在栈顶的元素: "); scanf("%d",&e);

Push (S,e);

printf("\n插入成功\n\n");

p(S);

printf("\n");

//将栈顶元素弹出栈顶

printf("\n将栈顶元素弹出栈顶\n");

Pop (S,e);

printf("\n栈中元素个数:");

m(S);

p(S);

printf("\n\n");

}

//---------------------------------------------------------------------------------

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;

srand( (unsigned)time(NULL) );//srand()函数产生一个以当前时间开始的随机种子

for(int i=0;i<5;i++)

{

*S.top++=rand( )%100+1;

}

return OK;

}// STACK_INIT_SIZE

//-----------------------------------------------------------------------------------------

void p(SqStack S)

{ int j;

j=S.top-S.base;

for(int i=0;i<j;i++)

printf("%d ",*--S.top);

}

//----------------------------------------------------------------------------------------

Status Push (SqStack &S, SElemType e)

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

if (S.top-S.base>=S.stacksize) //栈满,追加存储

{ int *Newbase= (SElemType*)

realloc(S.base,(S.stacksize+ STACKINCREMENT)

*sizeof(SElemType));

if(!Newbase) exit(OVERFLOW) ; //存储分配失败

S.base=Newbase;

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

S.stacksize+= STACKINCREMENT;

}

相关文档
最新文档