1、1LIAOCHENG UNIVERSITY计算机学院实验报告【20 16 20 17 学年第 1 学期】【一、基本信息】【实验课程】 数据结构【设课形式】 独立 非独立 【课程学分】 4【实验项目】 栈和队列【项目类型】 基础 综合 设计 研究创新 其它 【项目学时】 4【学生姓名】 【学 号】【系别专业】 软件开发【实验班组】 15 级 11 班 组 台 【同组学生】 【实验室名】 综合实验楼 【实验日期】 2016. 【报告日期】 2016.【二、 实验 教师对报告的最终评 价及处理意见】2实验成绩: (涂改无效)指导教师签名:张 XX 2016 年 月 日注:要将实验项目、实验课程的成绩
2、评定及课程考核办法明确告知学生,并报实验管理中心备案3【三、 实验预习 】实验目的和要求:1、熟练掌握栈和队列的结构,以及这种数据结构的特点;2、会定义顺序栈、循环队列,能实现栈、队列的基本操作;3、会利用栈解决典型问题,如数制转换等。实验内容和原理或涉及的知识点:用 C语言设计实现栈的初始化、入栈、出栈、判空等功能,并利用栈完成数制转换功能;设计实现循环队列的定义、初始化、入队、出队、求队列长度等功能。实验条件:具有 C 语言集成开发环境的计算机4实验设计方案:栈设计的算法有:1、初始化栈;2、入栈;3、出栈;4、判断栈是否为空;5、十进制转换为八进制。队列设计的算法有:1、初始化;2、入队
3、;3、出队;4、求队列长度。实验预习成绩(涂改无效) 合格 不合格5【四、实验过程、数据和实验结果记录】6实验方法、步骤、操作过程的记录描述或程序代码。实验过程中输入/输出数据、程序运行结果的记录。 (可加附页)1、根据实验预习阶段的实验设计方案,编写顺序栈的伪 C代码如下。typedef struct SElemType *base;SElemType *top;int stacksize;SqStack;Status InitStack(SqStack if (!S.base) exit (OVERFLOW);S.top = S.base;S.stacksize = STACK_INIT_
4、SIZE;return OK; /InitStackStatus Push(SqStack if (!S.base) exit (OVERFLOW);S.top = S.base + S.stacksize; S.stacksize+=STACKINCREMENT; / if*S.top+ = e; return OK; /Push7Status Pop(SqStack e = * - S.top;return OK; /Pop Status StackEmpty(SqStack S)if (S.base=S.top)return TRUE;return FALSE;void conversi
5、on () InitStack(S); scanf (“%d“,while (N) Push(S, N % 8); N = N/8;while (!StackEmpty(S) Pop(S,e);printf ( “%d“, e ); / conversion2、将算法细化为程序代码。#include #include 20#define LIST_INIT_SIZE 10#define LISTINCREMENT 100#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define TRUE 1#define FALSE 0#define
6、 OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int SElemType;typedef structSElemType *base;SElemType *top;int stacksize; SqStack;Status InitStack(SqStack *S);21Status Push(SqStack *S, SElemType e);Status Pop(SqStack *S, SElemType *e);Status StackEmpty(SqStack
7、S);void conversion ();int main()printf(“Please input a number to conver:n“);conversion();return 0;Status InitStack(SqStack *S)S-base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof (SElemType);if (!S-base) exit (OVERFLOW);S-top = S-base;S-stacksize = STACK_INIT_SIZE;return OK;Status Push(SqStack *S, SE
8、lemType e)4if (S-top - S-base = S-stacksize) /栈满S-base = (SElemType *)realloc(S-base, (S-stacksize + STACKINCREMENT)* sizeof(SElemType);if (!S-base) exit (OVERFLOW);S-top = S-base + S-stacksize;S-stacksize += STACKINCREMENT; / if*S-top+ = e;return OK; /PushStatus Pop(SqStack *S, SElemType *e)if(S-top = S-base)return ERROR;*e = *-S-top;return OK; /PopStatus StackEmpty(SqStack S)if (S.base = S.top)return TRUE;