数据结构实验三栈和队列及其应用
- 格式:doc
- 大小:476.00 KB
- 文档页数:45
实验编号: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;