数据结构实验三栈和队列及其应用

  • 格式:doc
  • 大小:476.00 KB
  • 文档页数:45

下载文档原格式

  / 45
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验编号:3四川师大《数据结构》实验报告2016年10月29日

实验三栈和队列及其应用_

一.实验目的及要求

(1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们;

(2)本实验训练的要点是“栈”的观点及其典型用法;

(3)掌握问题求解的状态表示及其递归算法,以及由递归程序到非递归程序的转化方法。

二.实验内容

(1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等);

(2)应用栈的基本操作,实现数制转换(任意进制);

(3)编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列);

(4)利用栈实现任一个表达式中的语法检查(括号的匹配)。

(5)利用栈实现表达式的求值。

注:(1)~(3)必做,(4)~(5)选做。

三.主要仪器设备及软件

(1)PC机

(2)Dev C++ ,Visual C++, VS2010等

四.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等);

A.顺序储存:

➢代码部分:

//Main.cpp:

#include"SStack.h"

int main()

{

SqStack S;

SElemType e;

int elect=1;

InitStack(S);

cout << "已经创建一个存放字符型的栈" << endl;

while (elect)

{

Muse();

cin >> elect;

cout << endl;

switch (elect)

{

case 1:

cout << "input data:";

cin >> e;

Push(S, e);

break;

case 2:

if(Pop(S, e))

{cout << e <<" is pop"<< endl; }

else{cout<<"blank"<

break;

case 3:

if (StackEmpty(S))

{

cout << "栈空" << endl;

}

else

{

cout << "栈未空" << endl;

}

break;

case 4:

GetTop(S, e);

cout << "e is " << e << endl;

break;

case 5:

StackLength(S);

break;

case 0:break;

}

}

DestroyStack(S);

return OK;

}

//SStack.cpp:

#include"SStack.h"

//输出菜单

void Muse()

{

cout << "请选择功能:" << endl;

cout << " 1.入栈" << endl;

cout << " 2.出栈" << endl;

cout << " 3.判栈空" << endl;

cout << " 4.返回栈顶部数据" << endl;

cout << " 5.栈长" << endl;

cout << " 0.退出系统" << endl;

cout << "你的选择是:" ;

}

//创建栈

Status InitStack(SqStack &S)

{

S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));

if (!S.base) exit(ERROR);

S.top = S.base;

S.stacksize = STACK_INIT_SIZE;

return OK;

}

//得到顶部数据

Status GetTop(SqStack S, SElemType &e)

{

if (S.base == S.top) return ERROR;

e = *(S.top - 1);

return OK;

}

//入栈

Status Push(SqStack &S, SElemType &e)

{

if (S.top - S.base >= STACK_INIT_SIZE)

{

S.base = (SElemType *)realloc(S.base, (STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));

if (!S.base) exit(ERROR);

S.top = S.base + S.stacksize;

S.stacksize += STACKINCREMENT;

}

*S.top++ = e;

return OK;

}

//出栈

Status Pop(SqStack &S, SElemType &e) {

if (S.base == S.top)

{

return ERROR;

}

e = *--S.top;

cout<<"pop succeed"<

return OK;

}

//判栈空

Status StackEmpty(SqStack S)

{

if (S.top == S.base)

{

return ERROR;