- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二.实验内容
(1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等);
(2)应用栈的基本操作,实现数制转换(任意进制);
(3)编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列);
(4)利用栈实现任一个表达式中的语法检查(括号的匹配)。
(5)利用栈实现表达式的求值。
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;
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;
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:
代码部分:
//Main、cpp:
#include"SStack、h"
int main()
{
SqStack S;
SElemType e;
int elect=1;
InitStack(S);
cout << "已经创建一个存放字符型的栈" << endl;
while (elect)
{
Muse();
cin >> elect;
StackLength(S);
break;
case 0:break;
}
}
DestroyStack(S);
return OK;
}
//SStack、cpp:
#include"SStack、h"
//输出菜单
void Muse()
{
cout << "请选择功能:" << endl;
cout << " 1、入栈" << endl;
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)
const int OK = 1;
typedef char SElemType;
typedef int Status;
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
{
free(S、base);
S、top=NULL;
S、stacksize = 0;
cout << "栈已销毁" << endl;
return OK;
}
int StackLength(SqStack S)
{
cout << "StackLength is "<<S、top-S、base << endl;
{
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);
cout << " 2、出栈" << endl;
cout << " 3、判栈空" << endl;
cout << " 4、返回栈顶部数据" << endl;
cout << " 5、栈长" << endl;
cout << " 0、退出系统" << endl;
cout << "您的选择就是:" ;
}
//创建栈
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"<<endl;}
}
e = *--S、top;
cout<<"pop succeed"<<endl;
return OK;
}
//判栈空
Status StackEmpty(SqStack S)
{
if (S、top == S、base)
{
return ERROR;
}
return OK;
}
//销毁栈
Status DestroyStack(SqStack &S)
实验编号:3四川师大《数据结构》实验报告2016年10月29日
实验三栈与队列及其ቤተ መጻሕፍቲ ባይዱ用_
一.实验目的及要求
(1)掌握栈与队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们;
(2)本实验训练的要点就是“栈”的观点及其典型用法;
(3)掌握问题求解的状态表示及其递归算法,以及由递归程序到非递归程序的转化方法。
注:(1)~(3)必做,(4)~(5)选做。
三.主要仪器设备及软件
(1)PC机
(2)Dev C++ ,Visual C++, VS2010等
四.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)
(1)编程实现栈在两种存储结构中的基本操作(栈的初始化、判栈空、入栈、出栈等);
A、顺序储存:
return OK;
}
//SStack、h:
#include<iostream>
#include<stdlib、h>
using namespace std;
const int STACK_INIT_SIZE = 100;
const int STACKINCREMENT = 10;
const int ERROR = 0;