顺序栈的初始化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}