春节假期,无聊至极,有给橘子做接生的,有做套圈玩钱的,有一家人打扑克娱乐的,有微信视频聊天划拳喝酒的,无聊的最高境界就是自己自言自语,自己就是聊天对象,自己和自己玩游戏,数数自己的头发等等。不还真有这样的人。有没有有兴趣数我写了多少字的。!!
栈的定义和特点
栈是限定仅在表尾进行插入或者删除操作的线性表。根据后进先出的原则。在日常生活中的例子,比如 洗盘子逐个把盘子叠放起来,然后洗的时候从上面拿一个洗一个。
- 从上图可看出 入站的小方块最后进入,出栈的时候小方块最先出去,则这就是栈的一种原则,一种形式。
- 有熟悉开发android APP的应该熟悉,有个Fragment的控件,可以在一个布局控件中加入Fragment,addBackStack(),popBackStack(),方法分别就是入站出栈。有想学习Android 开发的可以私信,并发文章噢!!
栈的基本操作
- 构造空栈
- 摧毁栈
- 清空栈
- 判断是否空栈
- 栈中元素个数
- 返回栈顶元素
- 入栈
- 出栈
- 访问所有栈
顺序栈的表示和实现
- 顺序栈是指用顺序存储结构实现的栈,用一组连续的存储单元依次存放,从栈底到栈顶的元素。
//
// Created by wzy on 2020/2/5/005.
//
#include <stdio.h>
#define MAXSIZE 100
typedef int SElemType;
typedef struct {
SElemType *base;
SElemType *top;
int stackSize;
} SqStack;
void initStack(SqStack &S) {
S.base = new SElemType[MAXSIZE];
if (!S.base) return;
S.top = S.base;//起初 栈顶和栈底属于同一位置 指同一个地址
S.stackSize = MAXSIZE;
}
bool Push(SqStack &S, SElemType e) {//栈 入栈值
bool flag = false;
if (S.top - S.base == S.stackSize) {
printf("栈满\n");
} else {
*S.top++ = e; //不满的话栈顶指针向上挪一位 并赋值
printf("入站成功\n");
flag = true;
}
return flag;
}
//出栈 返回栈顶元素
SElemType Pop(SqStack &S, SElemType &e) {
if (S.top == S.base) {
} else {
e = *--S.top - 1;
//出栈的话 栈顶指针减一 ,并返回栈顶元素 再减一(栈顶指的本身就是一个空栈位置)
}
return e;
}
//显示栈顶元素
SElemType GetTop(SqStack S) {
if (S.top != S.base) {
return *(S.top - 1);
}
}
int main() {
SqStack S;
initStack(S);
Push(S, 1);//入栈三次
Push(S, 2);
Push(S, 5);
SElemType a = GetTop(S);
printf("%d\n", a);//显示栈顶元素打印
SElemType aa;
Pop(S, aa);//出栈第一次
SElemType p1 = Pop(S, aa); //出栈两次,并打印栈顶元素
printf("%d\n", p1);
}
- 有顺序栈就有链栈 使用链表的方式进行存储站元素。但是基本的操作都是一样的。进一步的讲解我将在以后进行更新。
网友评论