c++栈 编写一个类实现简单的栈
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++栈 编写一个类实现简单的栈相关的知识,希望对你有一定的参考价值。
chu xue zhe a
ge wei bang bang mang ha
编写一个类,实现简单的栈操作:元素入栈,读出栈顶元素值,退栈,判断栈顶元素是否为空。如果栈溢出,程序终止。栈的数据成员有10个整形数组构成。先后作如下操作:
将10入栈;
将12入栈;
将14入栈;
读出栈顶元素;
退栈;
读出并输出栈顶元素。
using namespace std;
class Stack
public:
Stack()
top=-1;
bool push(int n)//压栈
if(!isfull())
data[++top]=n;
else
return false;
return true;
bool pop()//退栈
if(!isempty())
top--;
else
return false;
return true;
int gettop()//得到栈顶元素
return data[top];
bool isempty()//判断是否为空
return top==-1?true:false;
bool isfull()//判断是否已满
return top==9?true:false;
private:
int data[10];
int top;
;
int main()
Stack s;//建立一个栈
if(!s.push(10))//将10入栈;
cout<<"栈溢出"<<endl;
return 0;
if(!s.push(12))//将12入栈;
cout<<"栈溢出"<<endl;
return 0;
if(!s.push(14))//将14入栈;
cout<<"栈溢出"<<endl;
return 0;
cout<<s.gettop()<<endl;//读出并输出栈顶元素;
s.pop();//退栈
cout<<s.gettop()<<endl;//读出并输出栈顶元素;
如上类,这是可以存储10个整型数空间的栈。 参考技术A #include<iostream>
using namespace std;
class Stack
public:
Stack()
top=-1;
bool push(int n)//压栈
if(!isfull())
data[++top]=n;
else
return false;
return true;
bool pop()//退栈
if(!isempty())
top--;
else
return false;
return true;
int gettop()//得到栈顶元素
return data[top];
bool isempty()//判断是否为空
return top==-1?true:false;
bool isfull()//判断是否已满
return top==9?true:false;
private:
int data[10];
int top;
;
int main()
Stack s;//建立一个栈
if(!s.push(10))//将10入栈;
cout<<"栈溢出"<<endl;
return 0;
if(!s.push(12))//将12入栈;
cout<<"栈溢出"<<endl;
return 0;
if(!s.push(14))//将14入栈;
cout<<"栈溢出"<<endl;
return 0;
cout<<s.gettop()<<endl;//读出并输出栈顶元素;
s.pop();//退栈
cout<<s.gettop()<<endl;//读出并输出栈顶元素;
如上类,这是可以存储10个整型数空间的栈。 参考技术B #include <iostream>
using namespace std;
#define STACKSIZE 100
typedef char DataType;
void Error(char* _pchMessage);
typedef class CStack
private:
DataType m_Data[STACKSIZE];
int m_nTop;
public:
CStack();
~CStack();
void InitStack();
int StackEmpty();
int StackFull();
void PushStack(DataType _Temp);
DataType PopStack();
DataType StackTop();
void ShowStack();
SeqStack;
CStack::CStack()
for(int i = 0; i < STACKSIZE; ++i)
m_Data[i] = 0;
m_nTop = -1;
CStack::~CStack()
void CStack::InitStack()
//将顺序栈置空
for(int i = 0; i < STACKSIZE; ++i)
m_Data[i] = 0;
m_nTop = -1;
int CStack::StackEmpty()
return m_nTop == -1;
int CStack::StackFull()
return m_nTop == STACKSIZE - 1;
void CStack::PushStack(DataType _Temp)
if(STACKSIZE - 1 == m_nTop)
Error("Stack overflow.");
return ;
m_Data[++m_nTop] = _Temp;
DataType CStack::PopStack()
if( -1 == m_nTop)
Error("Stack underflow.");
return -1;
return m_Data[m_nTop--];
DataType CStack::StackTop()
if( -1 == m_nTop)
Error("Stack underflow.");
return -1;
return m_Data[m_nTop];
void CStack::ShowStack()
if(-1 == m_nTop)
cout << "此栈为空!" << endl;
else
for(int i = m_nTop; i > -1; --i)
cout << m_Data[i] << '\t' << endl;
int main()
SeqStack* pStack= new SeqStack;
pStack->InitStack();
if(pStack->StackEmpty())
cout << "此栈已空!" << endl;
if(pStack->StackFull())
cout << "此栈已满!" << endl;
pStack->PushStack('a');
pStack->PushStack('b');
pStack->PushStack('c');
pStack->PushStack('d');
pStack->PushStack('e');
cout << "PopStack = " << pStack->PopStack() << endl;
cout << "StackTop = " << pStack->StackTop() << endl;
pStack->ShowStack();
delete pStack;
pStack = NULL;
return 0;
void Error(char* _pchMessage)
fprintf(stderr, "Error: %s\n", _pchMessage);
cout << _pchMessage << endl;
参考技术C #include<iostream>
using
namespace
std;
class
Stack
public:
Stack()
top=-1;
bool
push(int
n)//压栈
if(!isfull())
data[++top]=n;
else
return
false;
return
true;
bool
pop()//退栈
if(!isempty())
top--;
else
return
false;
return
true;
int
gettop()//得到栈顶元素
return
data[top];
bool
isempty()//判断是否为空
return
top==-1?true:false;
bool
isfull()//判断是否已满
return
top==9?true:false;
private:
int
data[10];
int
top;
;
int
main()
Stack
s;//建立一个栈
if(!s.push(10))//将10入栈;
cout<<"栈溢出"<<endl;
return
0;
if(!s.push(12))//将12入栈;
cout<<"栈溢出"<<endl;
return
0;
if(!s.push(14))//将14入栈;
cout<<"栈溢出"<<endl;
return
0;
cout<<s.gettop()<<endl;//读出并输出栈顶元素;
s.pop();//退栈
cout<<s.gettop()<<endl;//读出并输出栈顶元素;
如上类,这是可以存储10个整型数空间的栈。
设计一个获取最小值时间复杂度为O的栈
【题目】
- 实现一个栈,在实现栈的基本功能的前提下,再实现返回最小元素的操作。
【要求】
- pop、push、getMin操作的时间复杂度都是O(1)
- 设计的类可以使用现成的栈结构。
【分析】
- 想要使得获取最小值的时间复杂度为O(1),最简单的方法就是提前将最小值记录下来,当我们需要获取时便可直接获取
- 栈的特点就是先进后出。它的操作具有一定规律,这使得我们可以很好的记录最小值。
- 很容易就能够想到“双栈”来实现
【实现】
- 实现语言:C++
- 源代码如下:
#include<iostream>
#include<stack>
using namespace std;
#define Error -1
// 一个有获取最小值功能的特殊栈,获取最小值的时间复杂度为O(1)
class GetMinStack
{
private:
stack<int> m_BasicStack; //主栈
stack<int> m_MinNumStack; //最小值栈
public:
void push(int value) //入栈
{
if(m_BasicStack.empty()) //如果栈中无数据
m_MinNumStack.push(value);
else if(value<=m_MinNumStack.top()) //如果入栈的值比当前的最小值还要小
m_MinNumStack.push(value);
m_BasicStack.push(value);
}
int pop()
{
if(m_MinNumStack.empty())
{
//不可出栈
cout<<"您操作的栈为空"<<endl;
return Error;
}
int temp=m_BasicStack.top();
m_BasicStack.pop();
if(temp==m_MinNumStack.top())
m_MinNumStack.pop();
return temp;
}
int getMin()
{
if(m_MinNumStack.empty())
{
//不可出栈
cout<<"您操作的栈为空"<<endl;
return Error;
}
return m_MinNumStack.top();
}
};
int main()
{
GetMinStack test;
test.push(5);
test.push(8);
test.push(4);
test.push(10);
cout<<"该栈最小的数为:"<<test.getMin()<<endl;
}
- 运行截图
以上是关于c++栈 编写一个类实现简单的栈的主要内容,如果未能解决你的问题,请参考以下文章
首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)
用java编写程序,利用线程同步编写一个栈操作程序,包括数据的进栈和出栈。