数据结构---栈和队列(栈、队列、循环队列)

一、栈

1.概念及结构特点
        栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
栈的特点:只能在一端进行数据的插入和删除;遵循“先进后出”原则。
数据结构---栈和队列(栈、队列、循环队列)_第1张图片
入栈和出栈操作
数据结构---栈和队列(栈、队列、循环队列)_第2张图片
结构体定义

// 支持动态增长的栈
typedef int STDataType;
typedef struct Stack
{
        STDataType* _a;
        int _top; // 栈顶
         int _capacity; // 容量
}Stack;

2.接口实现
接口定义

// 初始化栈
void StackInit(Stack* ps);
// 入栈
void StackPush(Stack* ps, STDataType data);
// 出栈
void StackPop(Stack* ps);
// 获取栈顶元素
STDataType StackTop(Stack* ps);
// 获取栈中有效元素个数
int StackSize(Stack* ps);
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0
int StackEmpty(Stack* ps);
// 销毁栈
void StackDestroy(Stack* ps);

接口实现

void StackInit(Stack* ps)
{
   
	ps->_a = (STDataType*)malloc(sizeof(STDataType)*2);
	ps->_capacity = 5;
	ps->_top = 0;
}
// 入栈 
void StackPush(Stack* ps, STDataType data)
{
   
	assert(ps);
	//判断栈是否满了,如果满了先进行增容在入栈
	if (ps->_top == ps->_capacity)
	{
   
		ps->_capacity *= 2;
		ps->_a = (STDataType*)realloc(ps->_a,sizeof(STDataType)*(ps->_capacity));
	}
	ps->_a[ps->_top] = data;
	ps->_top++;
}
// 出栈 
void StackPop(Stack* ps)
{
   
	assert(ps);
	//判断栈是否为空,如果为空直接退出
	if (StackEmpty(ps))
		return;
	printf("%d ",ps->_a[ps->_top-1]);
	ps->_top--;
}
// 获取栈顶元素 
STDataType StackTop(Stack* ps)
{
   
	assert(ps)

你可能感兴趣的:(笔记,队列,数据结构,栈)