赞
踩
栈是一种基本的数据结构,具有后进先出(LIFO)的特点。在栈中,最后进入的元素最先被访问。在实际生活中,例如乘坐电梯或使用药片盒时,都可以用栈的概念来解释。在C++中,我们可以使用<stack>
头文件提供的栈类实现栈数据结构。
stack<Type> S;
定义了一个栈对象S
,它存储的元素类型由Type
表示。
S.push(item);
将一个元素item
添加到栈的顶部。这相当于将元素放在栈的顶部,而原来在栈顶的元素会被往下推。这就是入栈操作。
S.top();
会返回栈顶的元素,但并不从栈中移除它。它用于查看栈中当前位于栈顶的元素,不影响栈原本的结构。
S.pop();
将栈顶的元素从栈中移除,但并不返回该元素的值。因此通常会先使用S.top()
获取栈顶元素的值,然后使用S.pop()
将其从栈中删除。进行出栈操作,防止出栈元素丢失。
S.size();
返回栈中元素的数量,即栈当前的大小。
S.empty();
检查栈是否为空。如果栈中没有任何元素,就认为栈为空,返回true
;否则,返回false
。你可以使用这个函数来判断是否需要进一步处理栈中的元素。
下面是一个我使用Manim(Python库)制作的有关堆栈数据结构后入先出的演示过程。
【Manim】堆栈可视化演示【数据结构】
题目来源:hdu 1062 Text Reverse Hangzhou Dianzi University ACM Team
题目
3
olleh !dlrow
m'I morf .udh
I ekil .mca
hello world!
I'm from hdu.
I like acm.
题目(翻译)
3
olleh !dlrow
m'I morf .udh
I ekil .mca
hello world!
I'm from hdu.
I like acm.
getchar()
来读取整数T后的换行符\n
,然后可以使用gets()
读取一行并进行处理。解题思路:
int n;//记录输入的测试用例数量
char ch;//存储读入的字符
scanf("%d", &n);//读取一个整数n
getchar();//处理输入缓冲区中的换行符
while (n--);
stack<char> S;
,用于存储字符。ch = getchar();
从输入中读取一个字符,赋值给变量 ch
。if (ch == ' ' || ch == '\n' || ch == EOF)
,判断读入的字符是否为空格、换行或文件结尾。while (!S.empty())
,将栈中的元素输出并清除。printf("%c", S.top());
输出栈顶元素。S.pop();
将栈顶元素弹出,达到清除栈顶的目的。S.push(ch);
。总代码:
#include <bits/stdc++.h> using namespace std; int main() { int n; char ch; scanf("%d", &n); getchar(); while (n--) { stack<char> S; while (true) { ch = getchar(); if (ch == ' ' || ch == '\n' || ch == EOF) { while (!S.empty()) { printf("%c", S.top()); S.pop(); } if (ch == '\n' || ch == EOF) break; printf(" "); } else { S.push(ch); } } printf("\n"); } return 0; }
上述程序通过栈来翻转字符串。根据题目要求,我们按照空格、换行符或文件结尾作为分隔符,将输入的字符串进行翻转输出。
栈在使用过程中需要一定的空间来存储元素。如果栈的深度过大或存入栈的数组过大,总数会超过系统为栈分配的空间,导致栈溢出的问题。解决此问题的方法有两种:
本文对栈的使用进行初步介绍。在实际应用中,应根据需求选择合适的数据结构和操作,以实现更高效和准确的算法。
算法竞赛入门到进阶 罗勇军
Problem - 1062 Hangzhou Dianzi University Online Judge 3.0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。