目录
栈一、栈的基本概念1、栈的定义栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。
栈
一、栈的基本概念
1、栈的定义
栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。
栈顶(Top):线性表允许进行插入删除的那一端。
栈底(Bottom):固定的,不允许进行插入和删除的另一端。
空栈:不含任何元素的空表。
栈又称为后进先出(Last In First Out)的线性表,即后面进来的元素先出去,简称LIFO结构
2、栈的常见基本操作
InitStack(&S):初始化一个空栈S。
StackEmpty(S):判断一个栈是否为空,若栈为空则返回true 1,否则返回false 0。
Push(&S, x):进栈(栈的插入操作),若栈S未满,则将x加入使之成为新栈顶。
Pop(&S, &x):出栈(栈的删除操作),若栈S非空,则弹出栈顶元素,并用x返回。
GetTop(S, &x):读栈顶元素,若栈S非空,则用x返回栈顶元素。
DestroyStack(&S):栈销毁,并释放S占用的存储空间(“&”表示引用调用)。
二、栈的顺序存储结构
1、栈的顺序存储
采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶元素的位置。
若存储栈的长度为StackSize,则栈顶位置top必须小于StackSize。当栈存在一个元素时,top等于0,因此通常把空栈的判断条件定位top等于-1。
若现在有一个栈,StackSize是5,则栈的普通情况、空栈、满栈的情况分别如下图所示:
来道题目让你能够更直观地了解栈
1.题目:验证栈序列
输入:
2
5
1 2 3 4 5
5 4 3 2 1
4
1 2 3 4
2 4 1 3
输出:
Yes
No
代码:
#include<stdio.h> //栈
int k=0,s=1;
int a[100001],b[100001],zhan[1000001];
int main() {
int n;
scanf("%d",&n);
while(n--) {
int m;
scanf("%d",&m);
for(int i=1; i<=m; i++)
scanf("%d",&a[i]);
for(int i=1; i<=m; i++)
scanf("%d",&b[i]);
for(int i=1; i<=m; i++) {
zhan[++k]=a[i];
while(zhan[k]==b[s]&&zhan[k]&&b[s]) {
k--;
s++;
}
}
if(k!=0)
printf("No");
else
printf("Yes");
if(n!=0)
printf("\n");
k=0,s=1;
}
return 0;
}
1.队列的定义
在了解队列前,我们还需要了解一下线性表,线性表:是具有相同数据类型的n个数据元素的有限序列,其中n为表长,当n等于0的时候说明这个线性表是一个空表,是只允许在一端进行插入和删除的线性表,而且使用的时候要定义专属头文件#include<queue>或者c++中的万能头文件#include<bits/stdc++.h>;
队列定义:是只允许在一端进行插入,在另一端删除的线性表;
F从队尾插进队列,A从队头从队列中删除
有关队列的重要术语:队头,队尾,空队列
队头:允许删除元素的一端
队尾:允许插入的一端
空队列:队列里面没有元素
队列的特点:先进先出(FIFO)
队列常用函数:
- push() 在队尾插入一个元素
- pop() 删除队列第一个元素
- size() 返回队列中元素个数
- empty() 如果队列空则返回true
- front() 返回队列中的第一个元素
- back() 返回队列中最后一个元素
2.函数运用示例
1:push()在队尾插入一个元素
queue <string> q;
q.push("first");
q.push("second");
cout<<q.front()<<endl;
输出 first
2:pop() 将队列中最靠前位置的元素删除,没有返回值
queue <string> q;
q.push("first");
q.push("second");
q.pop();
cout<<q.front()<<endl;
输出2,因为队列中有两个元素
3:size() 返回队列中元素个数
queue <string> q;
q.push("first");
q.push("second");
cout<<q.size()<<endl;
分别输出1和0
最开始队列为空,返回值为1(ture);
插入两个元素后,队列不为空,返回值为0(false);
5:front() 返回队列中的第一个元素
queue <string> q;
q.push("first");
q.push("second");
cout<<q.front()<<endl;
q.pop();
cout<<q.front()<<endl;
第一行输出first;
第二行输出second,因为pop()已经将first删除了
6:back() 返回队列中最后一个元素
queue <string> q;
q.push("first");
q.push("second");
cout<<q.back()<<endl;
输出最后一个元素second
3.1.题目示例:
小结:诛天神魔