链式存储栈及基本应用
2017-04-08 14:10
127 查看
实验二 栈、队列
实验学时:2学时
背景知识:入栈、出栈,入队、出队。
目的要求
1.掌握栈、队列的思想及其存储实现。
2.掌握栈、队列的常见算法的程序实现。
实验内容
1.采用链式存储实现栈的初始化、入栈、出栈操作。
2.采用顺序存储实现栈的初始化、入栈、出栈操作。
3.采用链式存储实现队列的初始化、入队、出队操作。
4.采用顺序存储实现循环队列的初始化、入队、出队操作。
5.在主函数中设计一个简单的菜单,分别测试上述算法。
*6.综合训练:1)利用栈实现表达式求值算法。
2)利用栈实现迷宫求解。
实验说明
1.基本要求:实现算法1、3或算法2、4即可。
2.类型定义
顺序栈示例
#define MAX100 //栈的最大值
typedef struct
{ElemType *base;
int top;
}SqStack;
顺序队列示例
#define MAX100 //队列的最大长度
typedef struct
{ElemType *base;
int front,rear;
}SqQueue;
3.算法6的每个子功能尽可能写成函数形式。
注意问题
1.重点理解栈、队列的算法思想,能够根据实际情况选择合适的存储结构。
2.注意算法6的各个函数之间值的传递情况。
3.栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
/*
1.采用链式存储实现栈的初始化、入栈、出栈操作。
2.采用顺序存储实现栈的初始化、入栈、出栈操作。
3.采用链式存储实现队列的初始化、入队、出队操作。
4.采用顺序存储实现循环队列的初始化、入队、出队操作。
5.在主函数中设计一个简单的菜单,分别测试上述算法。
*6.综合训练:1)利用栈实现表达式求值算法。
2)利用栈实现迷宫求解。
*/
#define ElemType int
typedef struct LNode
{
ElemType data;
LNode *next;
}LNode,*LNodePtr;
void InitStack(LNodePtr &s)
{
s = new LNode();
s->next = NULL;
cout<<"stack has been inited."<<endl;
}
bool StackEmpty(LNodePtr &s)
{
return (s->next == NULL);
}
void Push(LNodePtr &s,ElemType x)
{
LNodePtr p = new LNode();
p->data = x;
p->next = s->next;
s->next = p;
}
void Pop(LNodePtr &s)
{
//ElemType x;
LNodePtr p;
if(s->next == NULL)
{
cout<<"Stack is empty."<<endl;
return ;
}
p = s->next;
//x = p->data;
s->next = p->next;
delete p;
//return x;
}
void StackDis(LNodePtr s)
{
LNodePtr p = s->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
int main()
{
LNodePtr s;
s = new LNode();
InitStack(s);
if(StackEmpty(s))
cout<<"stack is empty."<<endl;
else
cout<<"stack is not empty."<<endl;
for(int i=1;i<=5;++i)
Push(s,i);
StackDis(s);
Pop(s);
StackDis(s);
//cout << "Hello world!" << endl;
return 0;
}
实验学时:2学时
背景知识:入栈、出栈,入队、出队。
目的要求
1.掌握栈、队列的思想及其存储实现。
2.掌握栈、队列的常见算法的程序实现。
实验内容
1.采用链式存储实现栈的初始化、入栈、出栈操作。
2.采用顺序存储实现栈的初始化、入栈、出栈操作。
3.采用链式存储实现队列的初始化、入队、出队操作。
4.采用顺序存储实现循环队列的初始化、入队、出队操作。
5.在主函数中设计一个简单的菜单,分别测试上述算法。
*6.综合训练:1)利用栈实现表达式求值算法。
2)利用栈实现迷宫求解。
实验说明
1.基本要求:实现算法1、3或算法2、4即可。
2.类型定义
顺序栈示例
#define MAX100 //栈的最大值
typedef struct
{ElemType *base;
int top;
}SqStack;
顺序队列示例
#define MAX100 //队列的最大长度
typedef struct
{ElemType *base;
int front,rear;
}SqQueue;
3.算法6的每个子功能尽可能写成函数形式。
注意问题
1.重点理解栈、队列的算法思想,能够根据实际情况选择合适的存储结构。
2.注意算法6的各个函数之间值的传递情况。
3.栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
/*
1.采用链式存储实现栈的初始化、入栈、出栈操作。
2.采用顺序存储实现栈的初始化、入栈、出栈操作。
3.采用链式存储实现队列的初始化、入队、出队操作。
4.采用顺序存储实现循环队列的初始化、入队、出队操作。
5.在主函数中设计一个简单的菜单,分别测试上述算法。
*6.综合训练:1)利用栈实现表达式求值算法。
2)利用栈实现迷宫求解。
*/
#define ElemType int
typedef struct LNode
{
ElemType data;
LNode *next;
}LNode,*LNodePtr;
void InitStack(LNodePtr &s)
{
s = new LNode();
s->next = NULL;
cout<<"stack has been inited."<<endl;
}
bool StackEmpty(LNodePtr &s)
{
return (s->next == NULL);
}
void Push(LNodePtr &s,ElemType x)
{
LNodePtr p = new LNode();
p->data = x;
p->next = s->next;
s->next = p;
}
void Pop(LNodePtr &s)
{
//ElemType x;
LNodePtr p;
if(s->next == NULL)
{
cout<<"Stack is empty."<<endl;
return ;
}
p = s->next;
//x = p->data;
s->next = p->next;
delete p;
//return x;
}
void StackDis(LNodePtr s)
{
LNodePtr p = s->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
int main()
{
LNodePtr s;
s = new LNode();
InitStack(s);
if(StackEmpty(s))
cout<<"stack is empty."<<endl;
else
cout<<"stack is not empty."<<endl;
for(int i=1;i<=5;++i)
Push(s,i);
StackDis(s);
Pop(s);
StackDis(s);
//cout << "Hello world!" << endl;
return 0;
}
相关文章推荐
- nBSD]我的OpenBSD 3.6基本应用 [2004-09-16]
- TWebBrowser的基本应用
- SAN的基本知识和应用
- 多线程的基本概念及其简单应用
- 在VC中应用MSXML DOM 的一些基本实现方法
- C#中XML的基本应用
- 蓝牙基本介绍及相关应用
- 网页中的基本脚本语言应用
- 转载:TWebBrowser的基本应用 - Z的专栏
- WEB应用中的基本身份验证和表单身份验证
- Tomcat的基本应用
- Log4j的基本应用
- Windows注册表的基本知识及应用
- MySQL的基本应用
- MapObjects2.2 在C#中的应用(基本地图功能)
- SetCapture的基本应用示例
- WEB应用中的基本身份验证和表单身份验证
- ASP.NET基本应用
- C#中XML的基本应用
- java学习笔记(二) ----基本数据类型应用