-
栈是一种机制(栈机制)查看全部
-
栈类要求:
MyStack(int size);
~MyStack();
bool stackEmpty();
bool stackFull();
void clearStack();
int stackLength();
void push(char elem);
char pop(char &elem);
void stackTraverse();
查看全部 -
MyStack.h 文件
#ifndef MYSTACK_H
#define MYSTACK_H
class MyStack
{
public:
MyStack(int size);//分配内存初始化栈空间,设定栈容量,栈顶
~MyStack();//回收栈空间内存
bool stackEmpty();//判断栈是否为空,空返回ture,非空返回false
bool stackFull();//判定栈是否已经满,满返回ture,不满返回false
void clearStack();//清空栈
int stackLength(); //已有的元素个数
void push(char elem);//元素入栈,栈顶上升
char pop();//元素出栈,栈顶下降
bool pop(char &elem)
void stackTraverse(bool);//遍历栈中所有元素
//目的:掌握栈的实现原理和运行机制
private:
char *m_pBuffer;//栈空间指针
int m_iSize;//栈容量
int m_iTop;//栈顶,栈中元素个数
};
Mystack.ccp
#include "MyStack.h"
#include <iostream>
MyStack::MyStack(int size)//分配内存初始化栈空间,设定栈容量,栈顶
{
m_iSize = size;
m_pBuffer = new char[size];
m_iTop = 0;
}
~MyStack::MyStack()//回收栈空间内存
{
delete []m_pBuffer;
m_pBuffer = NULL;
}
bool MyStack::stackEmpty()//判断栈是否为空,空返回ture,非空返回false
{
if(0 == m_iTop)
{
return true;
}
return false;
}
bool MyStack::stackFull()//判定栈是否已经满,满返回ture,不满返回false
{
if(m_iTop >= m_iSize)
{
return true;
}
return false;
}
void MyStack::clearStack()//清空栈
{
m_iTop = 0;
}
int MyStack::stackLength(); //已有的元素个数
{
return m_iTop;
}
void MyStack::push(char elem);//元素入栈,栈顶上升
{
if(stackFull())
{
return false;
}
m_pBuffer[m_iTop] = elem;
m_itop++;
return true;
}
char MyStack:: pop()//元素出栈,栈顶下降
{
if(stackEmpty())
{
throw 1;
}else
{
m_iTop--;
m_pBuffer[m_iTop];
}
return m_pBuffer[m_iTop];
}
bool MyStack::pop(char &elem)
{
if(stackEmpty())
{
return false;
}else
{
m_iTop--;
elem = m_pBuffer[m_iTop];
}
return true;
}
void MyStack::stackTraverse(bool isFromButtom)//遍历栈中所有元素
{
if(isFromButtom)
{
for(int i=0;i<m_iTop;i++)
{
cout<<m_pBuffer[i]<<",";
}
}else
{
for(int i=m_iTop-1;i>=0;i--)
{
cout<<m_pBuffer[i]<<",";
}
}
}
#include <iostream>
#include "MyStack.h"
#include "MyStack.cpp"
using namespace std;
int main()
{
MyStack *pStack=new MyStack(5);
delete pStack;
pStack=NULL;
pStack->push('h');//低
pStack->push('e');
pStack->push('l');
pStack->push('l');
pStack->push('0');//顶
pStack->stackTraverse(true);
char elem =0;
pStack->pop(elem);//取出来的是栈顶的那个字符o
cout<<endl<<elem<<endl;
cout<<pStack->stackLength()<<endl;
//pStack->pop();
if(pStack->stackEmpty())
{
cout<<"栈为空"<<endl;
}
if(pStack->stackFull())
{
cout<<"栈为满"<<endl;
}
pStack->clearStack();+
cout<<pStack->stackLength()<<endl;
system("pause");
return 0;
}
查看全部 -
栈的 实现
查看全部 -
针对十六进制的优化
char num[]="0123456789ABCDEF";
数字作为num下标即可表示出>=10时的正确数字。
查看全部 -
习惯写成if(0==m_element)能够避免写成单个等号却找不到错误在哪的问题
查看全部 -
本节运用了运算符重载,类模板
查看全部 -
括号匹配需要有两个栈,第一个栈用来存放扫描到的字符,并且没有扫描到的情况;另外一个栈记载当前最急需的是哪一个字符,与当前的栈顶进行匹配
查看全部 -
m_pBuffer = new char[size]; 使用new动态申请了size个char类型大小的空间,如果把char换成类名时,就是申请size个类名大小的空间。但只要是给类实例化对象申请空间,就要调用类的构造函数,而所写的构造函数如果是 Coordinate(int x , int y ); 不是默认构造函数,参数没有默认值,在实例化对象时,就必须给赋予x,y值,否则就会报错,而使用new运算符申请多个内存时,无法为每个对象都赋初值x,y。那样就会报错。因此就需要将构造函数改为有默认值的构造函数 Coordinate(int x = 0, int y = 0); 这样的话编译就可以通过了,但每个对象的x,y值都是0 .
查看全部 -
1.注意 当函数形参是引用时,实参必须是变量或者变量的引用,而不能是具体的值 例如:如果要传 3,必须先int a=3,再把a传进去 2.新建文件到项目里时要勾选那两个选项
查看全部 -
1.设置栈的容量,它的值不会随进栈或出栈而改变 2.析构函数用来回收栈的内存,否则会造成内存泄漏 3.插入数据时,先判断栈是否为空;若满栈,则先清空栈 4.已有元素的个数是当前栈中元素的个数而不是栈的容量 5.入栈导致栈顶上升 出栈导致栈顶下降 6.遍历栈中所有的元素 从栈顶到栈底或者从栈底到栈顶 两种方式都可以
02:40
查看全部 -
当你传入一数据时,使用引用就能改变这个数据的值,到后面你想知道出栈元素的值就可以直接输出你开始传入的那个元素
查看全部 -
特殊类型
#include<ostream>
using namespace std;
friend sotream &operator<<(ostream &out,类型名 &coor)//声明一个友元函数
查看全部 -
栈的类模板,是栈能够对多种类型通用
查看全部 -
这是头文件
查看全部
举报