数据结构栈1.docx

上传人:b****6 文档编号:7409987 上传时间:2023-01-23 格式:DOCX 页数:13 大小:85.27KB
下载 相关 举报
数据结构栈1.docx_第1页
第1页 / 共13页
数据结构栈1.docx_第2页
第2页 / 共13页
数据结构栈1.docx_第3页
第3页 / 共13页
数据结构栈1.docx_第4页
第4页 / 共13页
数据结构栈1.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构栈1.docx

《数据结构栈1.docx》由会员分享,可在线阅读,更多相关《数据结构栈1.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构栈1.docx

数据结构栈1

大学数据结构课程实验报告

课程名称:

数据结构

班级:

软件1011

实验成绩:

指导教师:

姓名:

实验项目名称:

数据结构---栈

学号:

上机实践日期:

一、目的

理解栈数据结构及其应用;

理解递归及其应用

二、实验内容

1.栈的类定义

2.顺序栈的类定义、实现与测试;链栈的类定义、实现与测试

3.栈的应用1(可使用顺序栈或链栈完成):

实现括号匹配

测试如下表达式:

”{[()](())}”及”{[()]]}”

三、实验使用环境

VC++6.0控制台程序

四、实验关键代码与结果展示(部分截图)

1、栈的类定义:

constintmaxSize=50;

template

classStack

{

public:

Stack(){};

virtual~Stack();

virtualvoidPush(constT&x)=0;

virtualboolPop(T&x)=0;

virtualboolgetTop(T&x)const=0;

virtualboolIsEmpty()const=0;

virtualboolIsFull()const=0;

virtualintgetSize()const=0;

};

2、顺序栈的类定义、实现与测试:

#include

#include

#include"stdlib.h"

template

classSeqStack{

public:

SeqStack(intsz=50);

~SeqStack(){delete[]elements;};

voidPush(constT&x);

boolPop(T&x);

boolgetTop(T&x)const;

boolIsEmpty()const{return(top==-1)?

true:

false;}

boolIsFull()const{return(top==maxSize-1)?

true:

false;}

intgetSize()const{returntop+1;}

voidMakeEmpty(){top=-1;}

boolInPut();

boolOutPut()const;

private:

T*elements;

inttop;

intmaxSize;

voidoverflowProcess();

};

template

SeqStack:

:

SeqStack(intsz):

top(-1),maxSize(sz){

elements=newT[maxSize];

assert(elements!

=NULL);

};

template

voidSeqStack:

:

overflowProcess(){

intstackIncreament=maxSize;

T*newArray=newT[maxSize+stackIncreament];

if(newArray==NULL){cerr<<"存储分配失败!

"<

(1);}

for(inti=0;i<=top;i++)newArray[i]=elements[i];

maxSize=maxSize+stackIncreament;

delete[]elements;

elements=newArray;

};

template

boolSeqStack:

:

Pop(T&x){

if(IsEmpty()==true)returnfalse;

x=elements[top--];

returntrue;

};

template

voidSeqStack:

:

Push(constT&x){

if(IsFull()==true)overflowProcess();

elements[++top]=x;

};

template

boolSeqStack:

:

getTop(T&x)const{

if(IsEmpty()==true)returnfalse;

x=elements[top];

returntrue;

};

template

boolSeqStack:

:

InPut(){

Tval;

cin>>val;

Pop(val);

returntrue;

};

template

boolSeqStack:

:

OutPut()const{

cout<

returntrue;

};

测试:

#include

#include"SeqStack.h"

voidmain()

{

SeqStackseq(10);

intm;

for(inti=0;i<5;i++)

{

cout<<"请输入要入栈的一个整数:

";

cin>>m;

seq.Push(m);

//cout<

}

intt=seq.getSize();

cout<<"当前栈内共有元素:

"<

seq.Pop(m);

t=seq.getSize();

cout<<"执行Pop()后栈内元素个数为:

"<

//seq.Push(x);

cout<<"请输入InPut()的val:

";

seq.InPut();

t=seq.getSize();

cout<<"执行InPut()后栈内元素个数为:

"<

cout<<"执行OutPut()后栈顶元素为:

";

seq.OutPut();

}

3、链栈的类定义、实现与测试:

#include"SeqStack.h"

template

structLinkNode

{

Tdata;

LinkNode*link;

LinkNode(LinkNode*ptr=NULL){link=ptr;}

LinkNode(Titem,LinkNode*ptr){data=item;link=ptr;}

};

template

classLinkedStack

{

public:

LinkedStack():

top(NULL){}

virtual~LinkedStack(){makeEmpty();};

voidPush(constT&x);

boolPop(T&x);

boolgetTop(T&x)const;

boolIsEmpty()const{return(top==NULL)?

true:

false;}

intgetSize();

voidmakeEmpty();

friendostream&operator<<(ostream&os,SeqStack&s);

private:

LinkNode*top;

};

template

voidLinkedStack:

:

makeEmpty(){

LinkNode*p;

while(top!

=NULL)

{p=top;top=top->link;deletep;}

};

template

voidLinkedStack:

:

Push(constT&x){

top=newLinkNode(x,top);

//assert(top!

=NULL);

};

template

boolLinkedStack:

:

Pop(T&x){

if(IsEmpty()==true)returnfalse;

structLinkNode*p=top;

top=top->link;

x=p->data;

deletep;

returntrue;

};

template

boolLinkedStack:

:

getTop(T&x)const{

if(IsEmpty()==true)returnfalse;

x=top->data;

returntrue;

};

template

intLinkedStack:

:

getSize(){

LinkNode*p=top;intk=0;

while(top!

=NULL)

{top=top->link;k++;}

returnk;

};

template

ostream&operator<<(ostream&os,SeqStack&s){

os<<"栈中元素个数="<

LinkNode*p=S.top;inti=0;

while(p!

=NULL)

{os<<++i<<":

"<data<

returnos;

};

测试:

#include

#include"LinkedStack.h"

voidmain()

{

LinkedStacklsk;

intx=2;

lsk.Push(x);

x=3;

lsk.Push(x);

intt=lsk.getSize();cout<<"把2和3压栈后链栈内的元素个数为:

"<

lsk.makeEmpty();

t=lsk.getSize();

cout<<"清空栈内元素后,栈内元素个数为:

"<

cout<<"把1,3,5压栈进入栈内"<

x=1;lsk.Push(x);x=3;lsk.Push(x);x=5;lsk.Push(x);

cout<<"依次弹出栈内元素:

"<

while(lsk.IsEmpty()==false){

lsk.Pop(x);cout<

}

cout<

}

4、实现括号匹配:

#include"SeqStack.h"

#include

classkuohao

{

public:

voidPrintMatchedPairs(char*expression){

SeqStacks(50);

charj;

intlength=strlen(expression);

for(inti=1;i<=length;i++){

if(expression[i-1]=='('||expression[i-1]=='['||expression[i-1]=='{')s.Push(expression[i-1]);

elseif(expression[i-1]==')'||expression[i-1]==']'||expression[i-1]=='}'){

if(s.Pop(j)==true)

{

if(expression[i-1]==')'&&j=='(')

{cout<

elseif(expression[i-1]==']'&&j=='[')

{cout<

elseif(expression[i-1]=='}'&&j=='{')

{cout<

}

elsecout<<"没有与第"<

"<

}

}

while(s.IsEmpty()==false){

s.Pop(j);

cout<<"没有与"<

"<

}

}

private:

//constintmaxLength=100;

};

测试:

#include

#include"SeqStack.h"

#include"kuohao.h"

voidmain(){

kuohaok;

cout<<"表达式1测试“{[()](())}”:

"<

char*e1="{[()](())}";

k.PrintMatchedPairs(e1);

cout<

"<

char*e2="{[()]]}";

k.PrintMatchedPairs(e2);

}

六、附录

参考《数据结构(用面向对象方法与C++语言描述)》

附上SeqStack.h代码:

#include

#include

#include"stdlib.h"

template

classSeqStack{

public:

SeqStack(intsz=50);

~SeqStack(){delete[]elements;};

voidPush(constT&x);

boolPop(T&x);

boolgetTop(T&x)const;

boolIsEmpty()const{return(top==-1)?

true:

false;}

boolIsFull()const{return(top==maxSize-1)?

true:

false;}

intgetSize()const{returntop+1;}

voidMakeEmpty(){top=-1;}

//voidPrintMatchedPairs(char*expression);

boolInPut();

boolOutPut()const;

private:

T*elements;

inttop;

intmaxSize;

voidoverflowProcess();

};

template

SeqStack:

:

SeqStack(intsz):

top(-1),maxSize(sz){

elements=newT[maxSize];

assert(elements!

=NULL);

};

template

voidSeqStack:

:

overflowProcess(){

intstackIncreament=maxSize;

T*newArray=newT[maxSize+stackIncreament];

if(newArray==NULL){cerr<<"存储分配失败!

"<

(1);}

for(inti=0;i<=top;i++)newArray[i]=elements[i];

maxSize=maxSize+stackIncreament;

delete[]elements;

elements=newArray;

};

template

boolSeqStack:

:

Pop(T&x){

if(IsEmpty()==true)returnfalse;

x=elements[top--];

returntrue;

};

template

voidSeqStack:

:

Push(constT&x){

if(IsFull()==true)overflowProcess();

elements[++top]=x;

};

template

boolSeqStack:

:

getTop(T&x)const{

if(IsEmpty()==true)returnfalse;

x=elements[top];

returntrue;

};

template

boolSeqStack:

:

InPut(){

Tval;

cin>>val;

Pop(val);

returntrue;

};

template

boolSeqStack:

:

OutPut()const{

cout<

returntrue;

};

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1