栈的表示和应用

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

实验三栈的表示和应用

一、实验目的

1.掌握栈这种数据结构特性及其主要存储结构-顺序存储和链式存储结构。

2.了解和掌握递归程序设计的基本原理和方法。

3.学会在现实生活中灵活运用。

4.保存的文件名为:学号后2位姓名Linkstack.c

二、知识点

栈:属于一种操作受限的线性表,只在表的一端进行插入和删除操作的线性表。又称为后进先出LIFO (Last In First Out)或先进后出FILO (First In Last Out)线性表。

栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。用栈顶指针(top)来指示栈顶元素。

空栈:当表中没有元素时称为空栈。

1.栈的顺序存储结构及实现。

#include

#include

#define MAXSIZE 20 /* 数组最大界限 */

typedef int ElemType; /* 数据元素类型 */

typedef struct

{ ElemType a[MAXSIZE]; /* 一维数组子域 */

int top; /* 栈顶指针子域 */

}SqStack; /* 栈的顺序结构体类型 */

2、栈的链式存储结构

#include

#include

typedef struct node//定义结点类型

{int data;

struct node *next;

}Stacknode,*Linkstack;

//Linkstack为指向结构体的指针类型

//等价Stacknode *

三、实验内容

1、写程序实现栈的初始化,置空,入栈,出栈及输出栈内数据的函数,并调试。

注意:函数类型与调用方式一致。

提示:编写五个操作的函数,然后在主函数内对其进行调用。

Linkstack Init_stack()//初始化栈

int Empty_stack(Linkstack top)//判断空栈

Linkstack Push_stack(Linkstack top,int x)//元素入栈

Linkstack Pop_stack(Linkstack top,int *x)//元素出栈

void Pri_stack(Linkstack top)//输出栈中元素

2、栈的应用。

在第1题调试正确的基础上,写一个函数实现数据的进制转换。

如:十进制数108,转换为八进制数为154,即(108)

10=(154)

8

提示:

void Conver(int n,int d) //进制转换(除以基数、取余、倒序)

{//用循环辗转相除,将余数入栈

//将栈内的数输出

3、利用栈的思想,则中缀表达式(A+B)*D+E/(F+A*D)对应的后缀表达式为

。(只需写出结果)

提示:中缀转变为后缀表达式,操作数输出,操作符进栈。

1、进栈的操作符优先级要高于栈顶的操作符,否则先让栈顶的操作符先出栈,

直到高于栈顶的优先级,才可入栈。

2、扫描表达式前入栈#,表达式扫描完再入栈#。

3、()内操作符优先级>()优先级>()外操作符优先级

4、优先级相同的操作符,先入栈的高于后入栈的。

相关文档
最新文档