数据结构——栈

数据结构

栈的基本知识:

数组+循环——>栈 队列

什么是栈?

栈(Stack)是一种线性存储结构。

栈具有的特点:

类比于弹夹,先进后出,后进先出——>FILO(first in last out),所以只能在栈顶进行插入和删除操作。

实现栈需要用到 数组循环

栈里面的内容可以是任意类型的数据类型。栈类似于一个容器。

栈相关的一些术语:

**入栈:**将数据添加进栈中,也叫做压栈、进栈;

**出栈:**栈的删除操作,也叫做弹栈;

**栈顶:**允许元素插入与删除的末端称为栈顶;

**栈底:**允许元素插入与删除的起始端称为栈底。
请添加图片描述
栈常用的操作:

使用标准库的栈时, 应包含相关头文件。在栈中应包含头文件: #include< stack > 。定义:stack< int > s;

//在栈中应包含头文件:
 	#include <stack> 
//定义:
	stack <int> s;
//1、入栈:通常命名为pop;
	s.pop();           //弹出栈顶元素, 但不返回其值
//2、出栈:通常命名为pop;
	s.push();          //将元素压入栈顶
//3、求栈的大小;
	s.size();          //返回栈中元素的个数
//4、判断栈是否为空;
	s.empty();         //如果栈为空则返回true, 否则返回false;
//5、获取栈顶元素的值;
	s.top();           //返回栈顶元素, 但不删除该元素

栈的指针总是指向栈顶元素

栈的分类:

1、基于数组的栈——以数组为底层数据结构时,通常以数组头为栈底,数组头到数组尾为栈顶的生长方向;

2、基于单链表的栈——以链表为底层的数据结构时,以链表头为栈顶,便于节点的插入与删除,压栈产生的新节点将一直出现在链表的头部。

实际操作:

1、基于数组的栈:

#include <stdio.h>

char stack[512];
int top = 0;

//声明函数
void push(char c);
char pop(void);
int is_empty(void);

int main(void)
{
	push('a');
	push('b');
	push('c');

	while(!is_empty())
	{
		putchar(pop());
	}
	printf("\n");

	return 0;
}

//入栈函数的实现
void push(char c)
{
	stack[top++] = c;//数组的指针+1
}

//出栈函数的实现
char pop(void)
{
	return stack[--top];//数组的指针-1
}

//判断栈是否为空的函数实现
int is_empty(void)
{
/*
	if(top == 0)
		return 1;
	else
		return 0;
*/
	return top == 0;
}

为空的函数实现
int is_empty(void)
{
/*
	if(top == 0)
		return 1;
	else
		return 0;
*/
	return top == 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪里看雪的薛同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值