栈和队列.docx

上传人:b****8 文档编号:9812983 上传时间:2023-02-06 格式:DOCX 页数:17 大小:17.28KB
下载 相关 举报
栈和队列.docx_第1页
第1页 / 共17页
栈和队列.docx_第2页
第2页 / 共17页
栈和队列.docx_第3页
第3页 / 共17页
栈和队列.docx_第4页
第4页 / 共17页
栈和队列.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

栈和队列.docx

《栈和队列.docx》由会员分享,可在线阅读,更多相关《栈和队列.docx(17页珍藏版)》请在冰豆网上搜索。

栈和队列.docx

栈和队列

顺序栈和循环队列含答案

一.任务

顺序栈的定义及其相关操作。

二.任务要求

(1)定义栈的顺序存储结构。

(2)编写初始化栈的函数。

(3)编写判断栈空的函数。

(4)编写判断栈满的函数。

(5)编写进栈函数。

(6)编写出栈函数。

(7)编写遍历顺序栈的函数。

(8)编写取栈顶元素的函数。

三.工作过程

1.数据结构设计

顺序栈的数据元素类型为int。

如下是其定义,请在下划线处填上相应代码,使其完整。

typedefintElemType;

#defineStackSize100

typedefstructSeqStack{

ElemTypedata[StackSize];

structSeqStacktop;

}SeqStack;/*栈的顺序结构体类型*/

2.功能(函数)定义

请为所做部分的操作进行函数定义,并建立源文件ds31.cpp。

//构造一个空栈

voidInitStack(SeqStack*s){

}

//判断栈空

intStackEmpty(SeqStack*s){

}

//判断栈满

intStackFull(SeqStack*s){

}

//进栈

voidPush(SeqStack*s,ElemTypex){

}

//退栈

intPop(SeqStack*s,ElemType&e){

}

//取栈顶元素

intGetTop(SeqStack*s,ElemType&e){

}

//遍历顺序栈

voidOutStack(SeqStack&s){

}

//数制转换,其中n是被转换的数,d是数制

voidCont(intn,intd){

}

队列操作的实现(循环队列)

一.任务

循环队列的定义及其相关操作。

二.任务要求

(1)定义队列的顺序存储结构(循环队列)。

(2)编写初始化循环队列的函数。

(3)编写判断循环队列空的函数。

(4)编写判断循环队列满的函数。

(5)编写入队函数。

(6)编写出队函数。

(7)编写遍历循环队列的函数。

三.工作过程

1.数据结构设计

队列的数据元素类型为int。

如下是其定义,请在下划线处填上相应代码,使其完整。

typedefintElemType;

#defineMAXSIZE10

typedefstructSqQueue{

ElemTypedata[MAXSIZE];/*一维数组子域*/

intfront;/*头指针子域*/

intrear;/*尾指针子域*/

}SqQueue;/*循环队列的结构体类型*/

2.功能(函数)定义

请为所做部分的操作进行函数定义,并建立源文件ds32.cpp。

//构造一个空队列

voidInitQueue(SqQueue*Q){

}

//判断循环队列空

intQueueEmpty(SeqStack*Q){

}

//判断循环队列满

intQueueFull(SeqStack*Q){

}

//入队

voidEnQueue(SqQueue*Q,ElemTypee){

}

//出队

ElemTypeDeQueue(SqQueue*Q){

}

//遍历循环队列

voidOutQueue(SqQueue*Q){

}

答案部分

注意答案使用的工程文件:

栈:

栈的声明:

(文件的名称ds.h)

#include

usingnamespacestd;

#include

#defineStackSize100

typedefintElemType;

typedefstruct

{

ElemTypedata[StackSize];

inttop;

}SeqStack;

voidinitstack(SeqStack*s);

voidPush(SeqStack*s,ElemTypex);

intPop(SeqStack*s);

intoutstack(SeqStack*s);

voidconversion(inti);

intGetTop(SeqStack*s);

函数的具体含义:

(文件的名称ds.cpp)

#include

usingnamespacestd;

#defineStackSize100//栈的长度

typedefintElemType;//类型

typedefstruct

{

ElemTypedata[StackSize];

inttop;

}SeqStack;

//构造一个空栈S

voidinitstack(SeqStack*s)

{

s->top=-1;//top的首值为-1

}

//进栈函数

voidPush(SeqStack*s,ElemTypex)

{

if(s->top==StackSize-1)//判断栈是否已满

{

cout<<"此栈已满,无法进行进栈操作。

";

return;

}else{

s->top++;

s->data[s->top]=x;}

}

//出栈

intPop(SeqStack*s)

{ElemTypee;

if(s->top==-1)//判断栈是否为空

{

cout<<"此栈为空,无法进行出栈操作。

";

return0;

}

else{

e=s->data[s->top];

s->top--;

cout<<"出栈的数为:

"<

return1;}

}

 

//遍历操作

intoutstack(SeqStack*s){

ElemTypei=0,k;

inta[100];//这里定义一个数组是为了能按照逻辑输出

while(s->top!

=-1){

a[i]=s->data[s->top];

s->top--;

i++;

}

k=i;

if(k!

=0){//是为了在重复出栈的时候提示栈是否为空能否在进行出栈的操作的条件

cout<<"\n栈为:

"<

for(inti1=i-1;i1>=0;i1--){//用for循环是为了能按照逻辑输出

cout<

s->top++;//是为了指针仍然只想栈尾

}

return1;

}

else{cout<<"此栈已空,不能进行出栈操作。

";return0;}

}

 

//栈的应用求其进制的转换

voidconversion(inti){

SeqStack*s1;

SeqStacks2;

initstack(&s2);

intx,e,d;

cout<<"转化几进制i:

";

cin>>d;

while(i>0)

{

x=i%d;

Push(&s2,x);

i=i/d;

}

cout<<"转化后的数为:

";

s1=&s2;

while(s1->top!

=-1){

e=s1->data[s1->top];

s1->top--;

cout<

}

cout<

}

 

//取栈顶元素

intGetTop(SeqStack*s)

{inte;

if(s->top==-1)

{

cout<<"此栈是空,无法进行此操作。

";

return0;

}

else{

e=s->data[s->top];

cout<<"栈顶元素:

"<

}

return1;

}

主函数:

(文件名称dsmain)

#include

usingnamespacestd;

#include"ds.h"

voidmain(){

intk;

SeqStacks;

do

{

cout<<"\n";

cout<<"\n";

cout<<"\n1.初始化栈";

cout<<"\n2.进栈";

cout<<"\n3.出栈";

cout<<"\n4.取栈顶元素";

cout<<"\n5.进制转换";

cout<<"\n6.退出程序";

cout<<"\n======================================";

cout<<"\n请输入您的选择命令(1,2,3,4,5,6)";

cin>>k;cout<<"\n";

switch(k)

{

case1:

{

initstack(&s);//构造一个空栈

cout<<"\nok"<

case2:

{

intdata;

cout<<"data的值:

";

cin>>data;

Push(&s,data);

outstack(&s);//调用遍历函数

cout<

cout<<"\nok"<

case3:

{

Pop(&s);//调用出栈函数

outstack(&s);//调用遍历函数

cout<

case4:

GetTop(&s);break;

case5:

{inti;

cout<<"请输入想转换的数math:

";

cin>>i;

conversion(i);

}break;

}

}while(k!

=6);/*switch{}*/

cout<<"\n再见!

";

cout<<"\n打回车键,返回。

"<

}/*main{}*/

循环队列

队列的定义:

(文件名称ds.h)

#include

usingnamespacestd;

typedefintElemType;

#defineMAXSIZE10

typedefstructSqQueue{

ElemTypedata[MAXSIZE];

intfront;

intrear;

}SqQueue;

voidInitQueue(SqQueue*Q);//初始化循环队列

intQueueEmpty(SqQueue*Q);//判断是否为空

intQueueFull(SqQueue*Q);//判断是否已满

voidEnQueue(SqQueue*Q,ElemTypee);//入队

ElemTypeDeQueue(SqQueue*Q);//出队

voidOutQueue(SqQueueQ);//遍历

//intGetQueue(SqQueue*Q);//对头函数

函数的具体含义:

(文件的名称ds.cpp)

#include

usingnamespacestd;

typedefintElemType;

#defineMAXSIZE10

typedefstructSqQueue

{

ElemTypedata[MAXSIZE];

intfront;

intrear;

}SqQueue;

//初始化循环队列

voidInitQueue(SqQueue*Q){

Q->front=0;

Q->rear=0;

}

 

//判断循环队列是否为空

intQueueEmpty(SqQueue*Q){

if(Q->front==Q->rear)

return1;

else

return0;

}

 

//判断循环队列是否已满

intQueueFull(SqQueue*Q){

if((Q->rear+1)%MAXSIZE==Q->front)

return1;

else

return0;

}

//入队

voidEnQueue(SqQueue*Q,ElemTypee){

if(QueueFull(Q)){cout<<"此队列已满,无法进行入队操作。

";return;}

else

{Q->data[Q->rear]=e;//赋值

Q->rear=(Q->rear+1)%MAXSIZE;//修改尾指针

return;

}

}

 

//出队

ElemTypeDeQueue(SqQueue*Q){

ElemTypee;

if(QueueEmpty(Q)){cout<<"此队列已空,无法进行出队操作。

";return0;}//判断是否为空

else

{e=Q->data[Q->front];//赋值给e

Q->front=(Q->front+1)%MAXSIZE;//修改头指针

return(e);}

}

 

//遍历队列

voidOutQueue(SqQueueQ){

{

inti;

if(QueueEmpty(&Q))

cout<<"该表为空表,无法再进行遍历操作。

";//判断是否为满

for(i=Q.front;i

cout<

}

}

//出对头元素

/*intGetQueue(SqQueue*Q){

if(QueueEmpty(Q)){cout<<"此队列已空,无法进行出队操作。

";return0;}

else

return(Q->data[Q->rear-1]);

}*/

 

主函数(文件名称dsmain.cpp)

#include

#include"ds.h"

usingnamespacestd;

voidmain(){

SqQueueQ;//定义一个Q

intk;

do

{

cout<<"\n";

cout<<"\n";

cout<<"\n1.初始化队列";

cout<<"\n2.入队";

cout<<"\n3.出队";

//cout<<"\n4.取对头元素";

cout<<"\n5.退出程序";

cout<<"\n======================================";

cout<<"\n请输入您的选择命令(1,2,3,4)";

cin>>k;cout<<"\n";

switch(k)

{

case1:

{

InitQueue(&Q);

cout<<"\nok"<

case2:

{

inte;

cout<<"请输入e的值:

";

cin>>e;

EnQueue(&Q,e);

cout<<"\n此时的循环队列为:

";

OutQueue(Q);//输出现在队列中的数

cout<

cout<<"\nok"<

case3:

{

inte;

e=DeQueue(&Q);

if(e!

=0)

cout<

cout<<"\n此时的循环队列为:

";

OutQueue(Q);//输出现在队列中的数

cout<

/*case4:

{

inttemp=GetQueue(&Q);

cout<<"对头元素:

"<

cout<<"\nok"<

}

}while(k!

=4);/*switch{}*/

cout<<"\n再见!

";

cout<<"\n打回车键,返回。

"<

}/*main{}*/

 

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

当前位置:首页 > 求职职场 > 简历

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

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