栈空间实现(顺序表)

在这里插入图片描述

common.h
#ifndef _COMMON_H_
#define _COMMON_H_
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<stdbool.h>
#define DataType int
typedef enum{FALSE, TRUE}BOOL; //vs2013中不支持bool类型,所以用枚举类型定义出来
#endif
TextMain.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"stack.h"
int main()
{
	SeqStack st;
	SeqStackInit(&st, STACK_DEFAULT_SIZE);
	SeqStackPush(&st, 1);
	SeqStackPush(&st, 2);
	SeqStackPush(&st, 3);
	SeqStackPush(&st, 4);
	SeqStackPush(&st, 5);
	SeqStackPush(&st, 6);
	SeqStackPop(&st);
	SeqStackPush(&st, 7);
	SeqStackPush(&st, 8);
    int val = 	SeqstackTop(&st);
    SeqStackPop(&st);
	SeqStackShow(&st);
	SeqStackDestroy(&st);
	system("pause");
	return  0;
}
stack.h
#ifndef _STACK_H_
#define _STACK_H_

#include"common.h"

#define STACK_DEFAULT_SIZE 8
#define STACK_INC_SIZE 5

//顺序栈
typedef struct SeqStack
{
	DataType *base;
	size_t         capacity;
	int              top;
}SeqStack;
/功能函数,判断栈是否满
BOOL SeqStackFull(SeqStack *pst)
{
	if (pst->top == pst->capacity)
		return TRUE;
	return FALSE;
}
//判断栈是否空
BOOL SeqStackEmpty(SeqStack *pst)
{
	if (pst->top == 0)
		return TRUE;
	return FALSE;
}
//栈空间的初始化
void SeqStackInit(SeqStack *pst, int sz);
//入栈
void SeqStackPush(SeqStack *pst, DataType x);
//显示
void SeqStackShow(SeqStack *pst);
//查看栈顶元素
DataType SeqstackTop(SeqStack *pst);
//出栈
void SeqStackPop(SeqStack *pst);
//摧毁栈空间
void SeqStackDestroy(SeqStack *pst);
void SeqStackInit(SeqStack *pst, int sz)
{
	pst->capacity = sz > STACK_DEFAULT_SIZE ? sz : STACK_DEFAULT_SIZE;
	pst->base = (DataType*)malloc(sizeof(DataType)*pst->capacity);
	pst->top = 0;
}
void SeqStackPush(SeqStack *pst, DataType x)
{
	if (SeqStackFull(pst))
	{
		printf("栈空间已满,%d不能插入\n", x);
		return;
	}
	pst->base[pst->top++] = x;
}
void SeqStackShow(SeqStack *pst)
{
	for (int i = pst->top - 1; i >= 0; --i)
	{
		printf("%d\n", pst->base[i]);
	}
}
DataType SeqstackTop(SeqStack *pst)
{
	if (SeqStackEmpty(pst))
	{
		printf("栈已空,无法查看\n");
	}
	return pst->base[pst->top - 1];
}
void SeqStackPop(SeqStack *pst)
{
	if (SeqStackEmpty(pst))
	{
		printf("栈已空,无法出栈\n");
	}
	pst->base[pst->top--];
}
void SeqStackDestroy(SeqStack *pst)
{
	free(pst);
	free(pst->base);
}

#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值