顺序栈的构建、插入、清除等

头文件
#pragma once

typedef int ElemType;
#define STACK_INIT_SIZE 10
#define STACKINCREMNT 5

typedef struct Stack
{
ElemType *base;
int top;
int stacksize;
}SqStack;

void InitStack(SqStack *st);
int EmptyStack(SqStack *st);
int PushStack(SqStack *st, ElemType val);
int GetTop(SqStack *st,ElemType *val);
int PopStack(SqStack *st,ElemType *val);
void ClearStack(SqStack *st);
void DestroyStack(SqStack *st);


cpp文件
#include “stack.h”
#include <assert.h>
#include<stdlib.h>
#include<stdio.h>

static void DeterPointNull(SqStack *st)
{
assert(st != NULL);
if(st == NULL)
{
exit(0);
}
}

static void ExpandSpace(SqStack *st)
{
ElemType s = (ElemType)malloc(sizeof(ElemType) * (st->stacksize + STACKINCREMNT ));
assert(s != NULL);

for(int i = 0; i < st->top; i++)
{
	s[i] = st->base[i];
}
free(st->base);
st->base = s;
st->stacksize += STACKINCREMNT ;

}
void InitStack(SqStack *st)
{
DeterPointNull(st);
st->base = (ElemType *)malloc(sizeof(ElemType) * STACK_INIT_SIZE);
assert(st->base != NULL);

st->top = 0;
st->stacksize = STACK_INIT_SIZE ;

}
int EmptyStack(SqStack *st)
{
DeterPointNull(st);

if(st->top == 0)
{
	return 1;
}

return 0;

}
int PushStack(SqStack *st,ElemType val)
{
DeterPointNull(st);

if(st->top == st->stacksize)
{
	ExpandSpace(st);
}
st->base[st->top++] = val;

return 1;

}
int GetTop(SqStack *st,ElemType *val)
{
DeterPointNull(st);

if(EmptyStack(st))
{
	return 0;
}
*val = st->base[st->top -1];
return 1;

}
int PopStack(SqStack *st,ElemType *val)
{
DeterPointNull(st);

if(!GetTop(st,val))
{
	return 0;
}
st->top--;
return 1;

}
void ClearStack(SqStack *st)
{
DeterPointNull(st);

st->top = 0;	

}
void DestroyStack(SqStack *st)
{
DeterPointNull(st);

free(st->base);
st->base = NULL;
st->top = st->stacksize;

}


主函数
#include<stdio.h>
#include “stack.h”

int main()
{
SqStack st;//
InitStack(&st);
//初始化完成之后 st->base指向一块malloc申请的空间 st->top == 0 st->stacksize = STACH_INI_SIZE;
PushStack(&st,10);
PushStack(&st,20);
PushStack(&st,30);
PushStack(&st,40);
PushStack(&st,50);

while(!EmptyStack(&st))
{
	ElemType val;
	PopStack(&st,&val);
	printf("%d ",val);
}
printf("\n");
DestroyStack(&st);
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值