您的位置:首页 > 其它

链式存储栈及基本应用

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;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息