栈空间实现(顺序表)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/gdarg/article/details/102692209

在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/gdarg/article/details/102692209