-
棧是一種機制(棧機制)查看全部
-
棧類要求:
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);//分配內存初始化??臻g,設定棧容量,棧頂
~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)//分配內存初始化??臻g,設定棧容量,棧頂
{
? ?m_iSize = size;
? ?m_pBuffer = new char[size];
? ?m_iTop = 0;
}
~MyStack::MyStack()//回收??臻g內存
{
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.設置棧的容量,它的值不會隨進?;虺鰲6淖?2.析構函數用來回收棧的內存,否則會造成內存泄漏 3.插入數據時,先判斷棧是否為空;若滿棧,則先清空棧 4.已有元素的個數是當前棧中元素的個數而不是棧的容量 5.入棧導致棧頂上升 ? ?出棧導致棧頂下降 6.遍歷棧中所有的元素 ? 從棧頂到棧底或者從棧底到棧頂 ? ?兩種方式都可以
02:40
?
查看全部 -
當你傳入一數據時,使用引用就能改變這個數據的值,到后面你想知道出棧元素的值就可以直接輸出你開始傳入的那個元素
查看全部 -
特殊類型
#include<ostream>
using namespace std;
friend sotream &operator<<(ostream &out,類型名 &coor)//聲明一個友元函數
查看全部 -
棧的類模板,是棧能夠對多種類型通用
查看全部 -
這是頭文件
查看全部
舉報