栈的基本操作

Stack.h

#pragma once 
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 12
typedef int DataType;
typedef struct Stack
{
	DataType _array[MAX_SIZE];//
	int _top;
}Stack;

//栈的初始化
void StackInit(Stack* s);

//入栈
void StackPush(Stack* s,DataType data);

//出栈
void StackPop(Stack* s);

//获取栈顶元素
DataType StackTop(Stack* s);

//获取栈中元素个数
int StackSize(Stack* s);

//检测栈是否为空
int StackEmpty(Stack* s);


//打印栈中的元素
void StackPrint(Stack* s);

Stack.c

#define _CRT_SECURE_NO_WARNING 1


#include "Stack.h"

//栈的初始化
void StackInit(Stack* s)
{
	if(NULL == s)
		return;
	s->_top = 0;
}


//入栈
void StackPush(Stack* s,DataType data)
{
	assert(s);
	if(MAX_SIZE == s->_top)
		return;
	s->_array[s->_top] = data;
	s->_top++;
}

//出栈
void StackPop(Stack* s)
{
	assert(s);
	if(0 == s->_top)
	{
		printf("栈已空!!!\n");
		return;
	}
	s->_top--;
}



//获取栈中元素个数
int StackSize(Stack* s)
{
	if(NULL == s)
	{
		printf("栈为空!!!\n");
		return 0;
	}
	return s->_top;
}

//检测栈是否为空
int StackEmpty(Stack* s)
{
	if(s->_top == 0)
		return 1;
	return 0;
}

//获取栈顶元素
DataType StackTop(Stack* s)
{
	assert(s);
	if(0 == s->_top)
	{
		printf("栈为空没有元素!!!\n");
		return 0;
	}
	return s->_array[s->_top-1];
}

//打印栈中的元素
void StackPrint(Stack* s)
{
	int i = 0;
	assert(s);
	for( ; i < s->_top ;i++)
	{
		printf("%d--->", s->_array[i]);
	}
	printf("NULL\n");
}

test.c

#include "Stack.h"

int main()
{
   Stack s;
	StackInit(&s);
	StackPush(&s,1);
	StackPush(&s,2);
	StackPush(&s,3);
	StackPush(&s,4);
	StackPush(&s,5);
	StackPrint(&s);
	printf("top is:%d\n",StackTop(&s));
	printf("size is:%d\n",StackSize(&s));

	StackPop(&s);
	StackPrint(&s);
	printf("top is:%d\n",StackTop(&s));
	printf("size is:%d\n",StackSize(&s));
	return 0;
}   

猜你喜欢

转载自blog.csdn.net/ijn842/article/details/80274340