stack函数用法-stack常用函数
股票市场是一个需要不断学习和适应的市场,投资者需要及时了解市场动态和公司信息,以便做出正确的投资决策。接下来,谈闻财经将重点带大家了解stack函数用法,希望可以帮到你。
- 1、分别写函数实现初始化栈、入栈、出栈、判断栈空、判断栈满。例如入栈序列为1 2 3 4 5,出栈则为5 4 3 2 1
- 2、帮忙吧这个伪代码改成C++上课运行的代码
- 3、matlab中,如何使用堆栈
- 4、c++编程Stack(类与对象)
本文目录:
分别写函数实现初始化栈、入栈、出栈、判断栈空、判断栈满。例如入栈序列为1 2 3 4 5,出栈则为5 4 3 2 1
优质回答1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("n");
}
帮忙吧这个伪代码改成C++上课运行的代码
优质回答改好了,顺便添加一个测试函数main
#include <stack>
#include <stdio.h>
using namespace std;
int Rr_Ls(stack<char> s)
{
char x;
scanf("%c",&x);
while(x != '\n')
{
s.push(x); // 入栈
scanf("%c",&x);
}
while(s.empty() != true)
{
x = s.top(); // 输出栈顶元素,出栈分两步,这为第一步
s.pop(); // 移除栈顶元素,出栈第二步
printf("%c",x);
}
}
int main(int argc, char *argv[])
{
stack<char> a; //声明一个堆栈 //具体用法百度 C++ 标准库
Rr_Ls(a);
return 0;
}
堆栈stack常用函数:
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
matlab中,如何使用堆栈
优质回答Matlab源代码:堆栈类Stack的实现
-- by benbenknight
自己编写了一个堆栈类Stack,供大家分享。
类的成员函数清单如下:
Stack STACK 堆栈对象Stack的构造函数
auto_inc AUTO_INC 自动扩充堆栈容量
display DISPLAY 显示堆栈内容
empty EMPTY 清空堆栈
init INIT 初始化堆栈
isempty ISEMPTY 判断堆栈是否为空
pop POP 将栈顶元素弹出堆栈
push PUSH 将元素x压入堆栈
subsasgn SUBSASGN 对堆栈数据成员赋值
subsref SUBSREF 读取堆栈的数据成员
top TOP 返回栈顶元素
源代码清单如下:
(由于无法添加附件,只能出此下策,请大家原谅啊)
%-----------------------------------------------
% 文件【test_stack.m】的代码清单:
%-----------------------------------------------
% test_stack.m 测试堆栈对象
a = Stack;
a = init(a,10);
arr = [1 2 3];
for i=1:length(arr)
a = push(a,arr(i));
a.top
a.stack
end
while ~isempty(a)
[a,x] = pop(a);
x
a.top
a.stack
end
%-----------------------------------------------
% 文件【@Stack\auto_inc.m】的代码清单:
%-----------------------------------------------
function a = auto_inc(a)
% AUTO_INC 自动扩充堆栈容量
%
% a = auto_inc(a)
%
% benbenknight
if a.step_size<=0
a.step_size = 100;
end
a.max_size = a.max_size + a.step_size;
a.stack = [a.stack;zeros(a.step_size,1)];
%-----------------------------------------------
% 文件【@Stack\display.m】的代码清单:
%-----------------------------------------------
function display(p)
% DISPLAY 显示堆栈内容
%
% display(p)
%
% benbenknight
disp(struct(p));
%-----------------------------------------------
% 文件【@Stack\empty.m】的代码清单:
%-----------------------------------------------
function a = empty(a)
% EMPTY 清空堆栈
%
% a = empty(a)
%
% benbenknight
a.top = 0;
%-----------------------------------------------
% 文件【@Stack\init.m】的代码清单:
%-----------------------------------------------
function a = init(a,sz)
% INIT 初始化堆栈
%
% a = init(a,sz)
% sz:堆栈的初始容量大小。
%
% benbenknight
if sz>0
a.max_size = sz;
a.stack = zeros(sz,1);
else
error('Invalid stack size');
end
%-----------------------------------------------
% 文件【@Stack\isempty.m】的代码清单:
%-----------------------------------------------
function b = isempty(a)
% ISEMPTY 判断堆栈是否为空
%
% b = isempty(a)
% b:如果堆栈为空,返回1;否则,返回0。
%
% benbenknight
if a.top<=0
b = 1;
else
b = 0;
end
%-----------------------------------------------
% 文件【@Stack\pop.m】的代码清单:
%-----------------------------------------------
function [a,x] = pop(a)
% POP 将栈顶元素弹出堆栈
%
% [a,x] = pop(a)
% x:输出参数,保存弹出的栈顶元素
%
% benbenknight
if isempty(a)
x = [];
else
x = a.stack(a.top);
a.stack(a.top) = 0;
a.top = a.top-1;
end
%-----------------------------------------------
% 文件【@Stack\push.m】的代码清单:
%-----------------------------------------------
function a = push(a,x)
% PUSH 将元素x压入堆栈
%
% a = push(a,x)
%
% benbenknight
% 判断是否需要自动增长堆栈空间
if a.top == a.max_size
a = auto_inc(a);
end
% 添加
a.top = a.top + 1;
a.stack(a.top) = x;
%-----------------------------------------------
% 文件【@Stack\Stack.m】的代码清单:
%-----------------------------------------------
function a = Stack(varargin)
% STACK 堆栈对象Stack的构造函数
%
% a = Stack(varargin)
%
% benbenknight
switch nargin
case 0
a.top = 0; % 栈顶元素的下标
a.max_size = 0; % 堆栈的最大容量
a.step_size = 100; % 堆栈自动扩大容量时的步长
a.stack = []; % 堆栈元素数组
a = class(a,'Stack');
case 1
if isa(varargin{1},'Stack')
a = varargin{1};
else
error('Wrong argument type')
end
otherwise
error('Wrong Number of input arguments')
end
%-----------------------------------------------
% 文件【@Stack\subsasgn.m】的代码清单:
%-----------------------------------------------
function a = subsasgn(a,index,val)
% SUBSASGN 对堆栈数据成员赋值
%
% benbenknight
switch index(1).type
case '.'
switch index(1).subs
case 'top'
a.top = val;
case 'max_size'
a.max_size = val;
case 'step_size'
a.step_size = val;
case 'stack'
if length(index)==2
a.stack(index(2).subs{:}) = val;
else
a.stack = val;
end
end
end
%-----------------------------------------------
% 文件【@Stack\subsref.m】的代码清单:
%-----------------------------------------------
function b = subsref(a,index)
% SUBSREF 读取堆栈的数据成员
%
% benbenknight
switch index(1).type
case '.'
switch index(1).subs
case 'top'
b = a.top;
case 'max_size'
b = a.max_size;
case 'step_size'
b = a.step_size;
case 'stack'
if length(index)==2
b = a.stack(index(2).subs{:});
else
b = a.stack;
end
end
end
%-----------------------------------------------
% 文件【@Stack\top.m】的代码清单:
%-----------------------------------------------
function x = top(a)
% TOP 返回栈顶元素
% 注意,并不弹出堆栈
%
% x = top(a)
%
% benbenkight
if isempty(a)
x = [];
else
x = a.stack(a.top);
end
c++编程Stack(类与对象)
优质回答这样行不?:
class CStack
{
public:
CStack();//建立一个10个元素的栈
CStack(int s);//建立一个具有 s个元素的栈
CStack(CStack &r_s);//注意,没有重载赋值操作符
int get(int index);//返回下标为index 的栈元素
void push(int n);//进栈,top加1,把n的值存入栈顶
int isEmpty();//判断栈是否为空,空则返回1,否则返回0
int isFull();//判断栈是否是满的,空则返回1,否则返回0
int pop();//出栈,返回栈顶元素,top减1
~CStack();//析构函数,释放在构造时申请的空间
private:
int *a;
int size;//栈的大小
int top;//指向栈顶
};
#include <iostream>
using namespace std;
void PopAll(CStack &stack)
{
while (!stack.isEmpty())
cout << stack.pop() << " ";
cout << endl;
}
CStack::CStack() :size(10), top(-1)
{
cout << "Constructor" << endl;
a = new int[size];
}
CStack::CStack(int s) : size(s), top(-1)
{
cout << "Constructor" << endl;
a = new int[size];
}
CStack::CStack(CStack &r_s) : size(r_s.size), top(r_s.top)
{
cout << "copy Constructor" << endl;
a = new int[size];
memcpy(a, r_s.a, size * sizeof(int));
}
CStack::~CStack(){ PopAll(*this);cout << "Distructor" << endl; delete[] a; }
int CStack::get(int index){
if (index >= 0 && index < top)
return a[index];
else return -1;//-1作为返回错误?还是抛出异常?
}
void CStack::push(int n){
if (!isFull())
a[++top] = n;
}
int CStack::pop(){
if (!isEmpty())
return a[top--];
}
int CStack::isEmpty(){
if (-1 == top) return 1;
else return 0;
}
int CStack::isFull(){
if (top + 1 == size) return 1;
else return 0;
}
#include <iostream>
using namespace std;
void GetNDataToStack(CStack &stack, unsigned int n)
{
while (n--)
{
int DataGet;
cin >> DataGet;
stack.push(DataGet);
}
}
int main()
{
int nLoop;
cout << "输入要构造几组数据:";
cin >> nLoop;
for (int index = 0; index < nLoop; ++index)
{
cout <<"输入要多少个数据存储:";
unsigned int nDataCount;
cin >> nDataCount;
CStack stack(nDataCount);
GetNDataToStack(stack, nDataCount);
}
return 0;
}
运行效果:
看完本文,相信你已经得到了很多的感悟,也明白跟stack函数用法这些问题应该如何解决了,如果需要了解其他的相关信息,请点击谈闻财经的其他内容。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息储存空间服务,不拥有所有权,不承担相关法律责任。如有发现本站涉嫌抄袭侵权/违法违规的内容,请发送邮件,一经查实,本站将立刻删除。