数据结构
栈
栈的基本知识:
数组+循环——>栈 队列
什么是栈?
栈(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;
}