顺序栈的基本操作

是一种“后进先出”的数据结构,可以使用链表或顺序表来实现。

编写代码实现栈的以下功能:

初始化栈

入栈

出栈

获取栈顶元素

获取栈中有效元素个数

销毁栈

common.h

#ifndef _COMMON_H_
#define _COMMON_H_
#include "stdio.h"
#include "stdbool.h"
#include "malloc.h"
#include "assert.h"
#endif

stack.h

#ifndef _STACK_H_
#define _STACK_H_
#include "common.h"
#define Elemtype int
#define _STACK_SIZE 8
typedef struct Stack
{
	Elemtype *a;
	int top;		// 栈顶
	int capacity;  // 容量 
}Stack;
// 初始化栈 
void StackInit(Stack* ps,int sz); 
// 入栈 
void StackPush(Stack* ps, Elemtype data);
// 出栈 
void StackPop(Stack* ps); 
// 获取栈顶元素 
int StackTop(Stack* ps);
// 获取栈中有效元素个数 
int StackSize(Stack* ps); 
// 销毁栈 
void StackDestroy(Stack* ps); 
//判满
bool Isfull(Stack* ps);
//判空
bool IsEmpty(Stack* ps);
//显示
void Stackshow(Stack* ps);

bool Isfull(Stack* ps)
{
	assert(ps != NULL);
	return ps->top >= ps->capacity;
}

bool IsEmpty(Stack* ps)
{
	assert(ps != NULL);
	return ps->top == 0;
}

void StackInit(Stack* ps,int sz)
{
	assert(ps != NULL);
	ps->capacity = sz > _STACK_SIZE ? sz : _STACK_SIZE;
	ps->a = (Elemtype*)malloc(sizeof(Elemtype) * ps->capacity);
	assert(ps->a != NULL);
	ps->top = 0;
}

void StackPush(Stack* ps, Elemtype data)
{
	assert(ps != NULL);
	if (Isfull(ps))
	{
		printf("栈满");
		return;
	}
	ps->a[ps->top++] = data;
}

void Stackshow(Stack* ps)
{
	for (int i = ps->top - 1; i >= 0; i--)
		printf("%d ", ps->a[i]);
}

void StackPop(Stack* ps)
{
	assert(ps != NULL);
	if (IsEmpty(ps))
	{
		printf("栈空");
		return;
	}
	ps->top--;
}

int StackTop(Stack* ps)
{
	assert(ps != NULL);
	if (IsEmpty(ps))
	{
		printf("栈空");
		return;
	}
	return ps->a[ps->top-1];
}

int StackSize(Stack* ps)
{
	return ps->top;
}

void StackDestroy(Stack* ps)
{
	assert(ps != NULL);
	free(ps->a);
	ps->a = NULL;
	ps->top = ps->capacity = 0;
}


#endif

TestMain.c

int main()
{
	Stack s;
	StackInit(&s,8);
	StackPush(&s,1);
	StackPush(&s,3);
	StackPush(&s,5);
	StackPush(&s,7);
	StackPush(&s,9);
	StackPush(&s,10);
	Stackshow(&s);
	printf("\n");
	StackPop(&s);
	Stackshow(&s);
	printf("\n");
	StackTop(&s);
	Stackshow(&s);
	printf("\n");
	printf("栈的元素个数为%d \n",StackSize(&s));
	StackDestroy(&s);
	Stackshow(&s);
	return 0;
}

你可能感兴趣的:(c语言,数据结构,指针,栈)