-
棧是一種機(jī)制(棧機(jī)制)查看全部
-
棧類要求:
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);//分配內(nèi)存初始化棧空間,設(shè)定棧容量,棧頂
~MyStack();//回收??臻g內(nèi)存
bool stackEmpty();//判斷棧是否為空,空返回ture,非空返回false
bool stackFull();//判定棧是否已經(jīng)滿,滿返回ture,不滿返回false
void clearStack();//清空棧
int stackLength(); //已有的元素個(gè)數(shù)
void push(char elem);//元素入棧,棧頂上升
char pop();//元素出棧,棧頂下降
bool pop(char &elem)
void stackTraverse(bool);//遍歷棧中所有元素
//目的:掌握棧的實(shí)現(xiàn)原理和運(yùn)行機(jī)制
private:
char *m_pBuffer;//??臻g指針
int m_iSize;//棧容量
int m_iTop;//棧頂,棧中元素個(gè)數(shù)
};
Mystack.ccp
#include "MyStack.h"
#include <iostream>
MyStack::MyStack(int size)//分配內(nèi)存初始化棧空間,設(shè)定棧容量,棧頂
{
? ?m_iSize = size;
? ?m_pBuffer = new char[size];
? ?m_iTop = 0;
}
~MyStack::MyStack()//回收??臻g內(nèi)存
{
delete []m_pBuffer;
m_pBuffer = NULL;
}
bool MyStack::stackEmpty()//判斷棧是否為空,空返回ture,非空返回false
{
? ? if(0 == m_iTop)
? ? {
? ? ? ? return true;
? ? }
? ? return false;
}
bool MyStack::stackFull()//判定棧是否已經(jīng)滿,滿返回ture,不滿返回false
{
? ? if(m_iTop >= m_iSize)
? ? {
? ? ? ? return true;
? ? }
? ? return false;
}
void MyStack::clearStack()//清空棧
{
? ? m_iTop = 0;
}
int MyStack::stackLength(); //已有的元素個(gè)數(shù)
{
? ? 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);//取出來的是棧頂?shù)哪莻€(gè)字符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;
}
查看全部 -
棧的 實(shí)現(xiàn)?
查看全部 -
針對(duì)十六進(jìn)制的優(yōu)化
char num[]="0123456789ABCDEF";
數(shù)字作為num下標(biāo)即可表示出>=10時(shí)的正確數(shù)字。
查看全部 -
習(xí)慣寫成if(0==m_element)能夠避免寫成單個(gè)等號(hào)卻找不到錯(cuò)誤在哪的問題
查看全部 -
本節(jié)運(yùn)用了運(yùn)算符重載,類模板
查看全部 -
括號(hào)匹配需要有兩個(gè)棧,第一個(gè)棧用來存放掃描到的字符,并且沒有掃描到的情況;另外一個(gè)棧記載當(dāng)前最急需的是哪一個(gè)字符,與當(dāng)前的棧頂進(jìn)行匹配
查看全部 -
m_pBuffer = new char[size]; ?使用new動(dòng)態(tài)申請(qǐng)了size個(gè)char類型大小的空間,如果把char換成類名時(shí),就是申請(qǐng)size個(gè)類名大小的空間。但只要是給類實(shí)例化對(duì)象申請(qǐng)空間,就要調(diào)用類的構(gòu)造函數(shù),而所寫的構(gòu)造函數(shù)如果是 Coordinate(int x , int y ); ?不是默認(rèn)構(gòu)造函數(shù),參數(shù)沒有默認(rèn)值,在實(shí)例化對(duì)象時(shí),就必須給賦予x,y值,否則就會(huì)報(bào)錯(cuò),而使用new運(yùn)算符申請(qǐng)多個(gè)內(nèi)存時(shí),無法為每個(gè)對(duì)象都賦初值x,y。那樣就會(huì)報(bào)錯(cuò)。因此就需要將構(gòu)造函數(shù)改為有默認(rèn)值的構(gòu)造函數(shù) Coordinate(int x = 0, int y = 0); ?這樣的話編譯就可以通過了,但每個(gè)對(duì)象的x,y值都是0 .
查看全部 -
1.注意 當(dāng)函數(shù)形參是引用時(shí),實(shí)參必須是變量或者變量的引用,而不能是具體的值 例如:如果要傳 3,必須先int a=3,再把a(bǔ)傳進(jìn)去 2.新建文件到項(xiàng)目里時(shí)要勾選那兩個(gè)選項(xiàng)
查看全部 -
1.設(shè)置棧的容量,它的值不會(huì)隨進(jìn)?;虺鰲6淖?2.析構(gòu)函數(shù)用來回收棧的內(nèi)存,否則會(huì)造成內(nèi)存泄漏 3.插入數(shù)據(jù)時(shí),先判斷棧是否為空;若滿棧,則先清空棧 4.已有元素的個(gè)數(shù)是當(dāng)前棧中元素的個(gè)數(shù)而不是棧的容量 5.入棧導(dǎo)致棧頂上升 ? ?出棧導(dǎo)致棧頂下降 6.遍歷棧中所有的元素 ? 從棧頂?shù)綏5谆蛘邚臈5椎綏m?? ?兩種方式都可以
02:40
?
查看全部 -
當(dāng)你傳入一數(shù)據(jù)時(shí),使用引用就能改變這個(gè)數(shù)據(jù)的值,到后面你想知道出棧元素的值就可以直接輸出你開始傳入的那個(gè)元素
查看全部 -
特殊類型
#include<ostream>
using namespace std;
friend sotream &operator<<(ostream &out,類型名 &coor)//聲明一個(gè)友元函數(shù)
查看全部 -
棧的類模板,是棧能夠?qū)Χ喾N類型通用
查看全部 -
這是頭文件
查看全部
舉報(bào)