C++實現(xiàn)棧的操作(push和pop)_第1頁
C++實現(xiàn)棧的操作(push和pop)_第2頁
C++實現(xiàn)棧的操作(push和pop)_第3頁
C++實現(xiàn)棧的操作(push和pop)_第4頁
C++實現(xiàn)棧的操作(push和pop)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第C++實現(xiàn)棧的操作(push和pop)目錄棧的操作(push和pop)棧的組織形式棧中每個數(shù)據(jù)節(jié)點的定義棧的類的定義棧的push操作棧應用之進制轉(zhuǎn)換

棧的操作(push和pop)

棧的組織形式

如上圖所示:棧也是有多個數(shù)據(jù)節(jié)點組成的,每個節(jié)點包含有數(shù)據(jù)域和指向下一個節(jié)點的指針域。并且每次的push、pop和判空都是操作的棧頂指針top。

棧中每個數(shù)據(jù)節(jié)點的定義

classdata_node{

public:

data_node():data(0),next(NULL){}//defaultconstructerfunction

data_node(intvalue):data(value),next(NULL){}//includeargconstructerfunction

intdata;

data_node*next;//pointerthatpointtonextnode

};

棧的類的定義

classmy_stack{

public:

my_stack():top(NULL){}

voidpush(data_nodenew_data);

voidpop(data_node*pop_node);

boolempty();

data_node*top;

};

棧的push操作

voidmy_stack::push(data_nodenew_data)

data_node*pnode=NULL;

pnode=newdata_node(new_data.data);

pnode-next=top;

top=pnode;

voidmy_stack::pop(data_node*pop_node)

if(empty())

printf("thisstackisempty\n");

return;

pop_node-data=top-data;

data_node*pnode=top;

top=top-next;

deletepnode;

boolmy_stack::empty()

return(top==NULL);

}

完整的代碼如下:

#include"stdafx.h"

#includeiostream

#pragmawarning(disable:4996)

#includestring

usingnamespacestd;

classdata_node{

public:

data_node():data(0),next(NULL){}//defaultconstructerfunction

data_node(intvalue):data(value),next(NULL){}//includeargconstructerfunction

intdata;

data_node*next;//pointerthatpointtonextnode

classmy_stack{

public:

my_stack():top(NULL){}

voidpush(data_nodenew_data);

voidpop(data_node*pop_node);

boolempty();

data_node*top;

voidmy_stack::push(data_nodenew_data)

data_node*pnode=NULL;

pnode=newdata_node(new_data.data);

pnode-next=top;

top=pnode;

voidmy_stack::pop(data_node*pop_node)

if(empty())

printf("thisstackisempty\n");

return;

pop_node-data=top-data;

data_node*pnode=top;

top=top-next;

deletepnode;

boolmy_stack::empty()

return(top==NULL);

intmain()

data_nodepop_node(0);

my_stackstack;

stack.push(3);

stack.push(2);

stack.push(6);//3,2,6

stack.pop(pop_node);

//printf("isempty%d\n",stack.empty());

printf("%2d",pop_node.data);

stack.pop(pop_node);

//printf("isempty%d\n",stack.empty());

printf("%2d",pop_node.data);

stack.pop(pop_node);

printf("%2d\n",pop_node.data);

printf("isempty%d\n",stack.empty());

return0;

}

棧應用之進制轉(zhuǎn)換

MyStack.h

#ifndefMYSTACK_H

#defineMYSTACK_H

#includeiostream

usingnamespacestd;

templatetypenameT

classMyStack

public:

MyStack(intsize);

//分配內(nèi)存初始化空間,設(shè)定棧容量,棧頂

~MyStack();

//回收??臻g內(nèi)存

boolstackEmpty();

//判定棧是否為空,為空返回true,非空返回false

boolstackFull();

//判定棧是否為滿,為滿返回true,不滿返回false

voidclearStack();

//清空棧

intstackLength();

//已有元素的個數(shù)

boolpush(Telem);

//元素入棧,棧頂上升

boolpop(Telem);

//元素出棧,棧頂下降

voidstackTraverse(boolisFromButtom);

//遍歷棧中所有元素

private:

T*m_pBuffer;

//??臻g指針

intm_iSize;

//棧容量

intm_iTop;

//棧頂,棧中元素個數(shù)

templatetypenameT

MyStackT::MyStack(intsize)

m_iSize=size;

m_pBuffer=newT[size];

m_iTop=0;

templatetypenameT

MyStackT::~MyStack()

delete[]m_pBuffer;

m_pBuffer=NULL;

templatetypenameT

boolMyStackT::stackEmpty()

if(0==m_iTop)

{

returntrue;

}

else

{

returnfalse;

}

templatetypenameT

boolMyStackT::stackFull()

if(m_iTop==m_iSize)

{

returntrue;

}

else

{

returnfalse;

}

templatetypenameT

voidMyStackT::clearStack()

m_iTop=0;

templatetypenameT

intMyStackT::stackLength()

returnm_iTop;

templatetypenameT

boolMyStackT::push(Telem)

if(!stackFull())

{

m_pBuffer[m_iTop]=elem;

m_iTop++;

returntrue;

}

else

{

returnfalse;

}

templatetypenameT

boolMyStackT::pop(Telem)

if(!stackEmpty())

{

m_iTop--;

elem=m_pBuffer[m_iTop];

returntrue;

}

else

{

returnfalse;

}

templatetypenameT

voidMyStackT::stackTraverse(boolisFromButtom)

if(isFromButtom)

{

for(inti=0;im_iTop;i++)

{

coutm_pBuffer[i];

}

}

else

for(inti=m_iTop-1;ii--)

{

coutm_pBuffer[i];

}

coutendl;

#endifMYSTACK_H

main.cpp

#include"MyStack.h"

#defineBINARY

2

#defineOCTONSRY

8

#defineHEXADECTMAL16

intmain()

charnum[]="0123456789ABCDEF";

MyStackchar*pStack=newMyStackchar(50);

intN=0;

cinN;

intmod=0;

while(N!=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論