大数据结构实验报告材料二.docx
- 文档编号:12609058
- 上传时间:2023-04-20
- 格式:DOCX
- 页数:15
- 大小:156.78KB
大数据结构实验报告材料二.docx
《大数据结构实验报告材料二.docx》由会员分享,可在线阅读,更多相关《大数据结构实验报告材料二.docx(15页珍藏版)》请在冰豆网上搜索。
大数据结构实验报告材料二
LIAOCHENGUNIVERSITY
计算机学院实验报告
【2016~2017学年第1学期】
【一、基本信息】
【实验课程】
数据结构
【设课形式】
独立□非独立☑
【课程学分】
4
【实验项目】
栈和队列
【项目类型】
基础☑综合□设计□研究创新□其它[]
【项目学时】
4
【学生姓名】
沈凯
【学号】
2015205377
【系别专业】
软件开发
【实验班组】
15级11班组台
【同组学生】
【实验室名】
综合实验楼
【实验日期】
2016.
【报告日期】
2016.
【二、实验教师对报告的最终评价及处理意见】
实验成绩:
(涂改无效)
指导教师签名:
张振领2016年月日
注:
要将实验项目、实验课程的成绩评定及课程考核办法明确告知学生,并报实验管理中心备案
【三、实验预习】
实验目的和要求:
1、熟练掌握栈和队列的结构,以及这种数据结构的特点;
2、会定义顺序栈、循环队列,能实现栈、队列的基本操作;
3、会利用栈解决典型问题,如数制转换等。
实验内容和原理或涉及的知识点:
用C语言设计实现栈的初始化、入栈、出栈、判空等功能,并利用栈完成数制转换功能;设计实现循环队列的定义、初始化、入队、出队、求队列长度等功能。
实验条件:
具有C语言集成开发环境的计算机
实验设计方案:
栈设计的算法有:
1、初始化栈;
2、入栈;
3、出栈;
4、判断栈是否为空;
5、十进制转换为八进制。
队列设计的算法有:
1、初始化;
2、入队;
3、出队;
4、求队列长度。
实验预习成绩(涂改无效)
合格□
不合格□
【四、实验过程、数据和实验结果记录】
实验方法、步骤、操作过程的记录描述或程序代码。
实验过程中输入/输出数据、程序运行结果的记录。
(可加附页)
1、根据实验预习阶段的实验设计方案,编写顺序栈的伪C代码如下。
typedefstruct{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
StatusInitStack(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;
returnOK;
}//InitStack
StatusPush(SqStack&S,SElemTypee){
if(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;returnOK;}//Push
StatusPop(SqStack&S,SElemType&e){
if(S.top==S.base)returnERROR;
e=*--S.top;
returnOK;
}//Pop
StatusStackEmpty(SqStackS)
{
if(S.base==S.top)
returnTRUE;
returnFALSE;
}
voidconversion(){
InitStack(S);
scanf("%d",&N);
while(N){
Push(S,N%8);
N=N/8;
}
while(!
StackEmpty(S)){
Pop(S,e);
printf("%d",e);
}
}//conversion
2、将算法细化为程序代码。
#include
#include
#defineLIST_INIT_SIZE10
#defineLISTINCREMENT100
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
typedefintStatus;
typedefintSElemType;
typedefstruct
{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
StatusInitStack(SqStack*S);
StatusPush(SqStack*S,SElemTypee);
StatusPop(SqStack*S,SElemType*e);
StatusStackEmpty(SqStackS);
voidconversion();
intmain()
{
printf("Pleaseinputanumbertoconver:
\n");
conversion();
return0;
}
StatusInitStack(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;
returnOK;
}
StatusPush(SqStack*S,SElemTypee)
{
if(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;
returnOK;
}//Push
StatusPop(SqStack*S,SElemType*e)
{
if(S->top==S->base)returnERROR;
*e=*--S->top;
returnOK;
}//Pop
StatusStackEmpty(SqStackS)
{
if(S.base==S.top)
returnTRUE;
returnFALSE;
}
voidconversion()
{
SqStackS;
intN,e;
InitStack(&S);
scanf("%d",&N);
while(N)
{
Push(&S,N%8);
N=N/8;
}
while(!
StackEmpty(S))
{
Pop(&S,&e);
printf("%d",e);
}
}
3、编译、链接、运行程序。
intmain()
{
printf("Pleaseinputanumbertoconver:
\n");
conversion();
return0;
4、循环队列的伪C代码如下:
#defineMAXQSIZE100//最大队列长度
typedefstruct{
QElemType*base;//动态分配存储空间
intfront;//头指针,若队列不空,
//指向队列头元素
intrear;//尾指针,若队列不空,指向
队列尾元素的下一个位置
}SqQueue;
StatusInitQueue(SqQueue&Q){
//构造一个空队列Q
Q.base=(ElemType*)malloc
(MAXQSIZE*sizeof(ElemType));
if(!
Q.base)exit(OVERFLOW);
//存储分配失败
Q.front=Q.rear=0;
returnOK;
}
StatusEnQueue(SqQueue&Q,ElemTypee){
//插入元素e为Q的新的队尾元素
if((Q.rear+1)%MAXQSIZE==Q.front)
returnERROR;//队列满
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
returnOK;
}
StatusDeQueue(SqQueue&Q,ElemType&e){
//若队列不空,则删除Q的队头元素,
//用e返回其值,并返回OK;否则返回ERROR
if(Q.front==Q.rear)returnERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
returnOK;
}
intQueueLength(SqQueueQ)
{
return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
5、将算法细化成程序代码:
#include
#include
#defineLIST_INIT_SIZE10
#defineLISTINCREMENT100
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
#defineTRUE1
#defineFALSE0
#definetrue1
#definefalse0
#defineOK1
#defineERROR0
#defineINFEASIBLE-1
#defineOVERFLOW-2
#defineOPSETSIZE7
#defineMAXQSIZE100
typedefintStatus;
typedefintElemType;
typedefintQElemType;
typedefstructQNode
{
QElemTypedata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct
{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
StatusInitQueue(LinkQueue*Q);
StatusDestoryQueue(LinkQueue*Q);
StatusPush(LinkQueue*Q,QElemTypee);
StatusPop(LinkQueue*Q,QElemType*e);
intmain()
{
LinkQueueQ;
QElemTypee;
InitQueue(&Q);
Push(&Q,1);
Push(&Q,2);
Push(&Q,3);
Push(&Q,4);
printf("Push(&Q,1);\nPush(&Q,2);\nPush(&Q,3);\nPush(&Q,4);\n");
while(Pop(&Q,&e))
{
printf("Pop(&Q,&e);\ne=%d\n",e);
}
DestoryQueue(&Q);
return0;
}
StatusInitQueue(LinkQueue*Q)
{
Q->front=Q->rear=(QueuePtr)malloc(MAXQSIZE*sizeof(QNode));
if(!
Q->front)
exit(OVERFLOW);
Q->front->next=NULL;
returnOK;
}
StatusDestoryQueue(LinkQueue*Q)
{
while(Q->front)
{
Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear;
}
returnOK;
}
StatusPush(LinkQueue*Q,QElemTypee)
{
QueuePtrp=(QueuePtr)malloc(sizeof(QNode));
if(!
p)
exit(OVERFLOW);
p->data=e;
Q->rear->next=p;
p->next=NULL;
Q->rear=p;
returnOK;
}
StatusPop(LinkQueue*Q,QElemType*e)
{
if(Q->front==Q->rear)
returnERROR;
QueuePtrp=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);
returnOK;
}
6、编译、链接、运行程序。
intmain()
{
LinkQueueQ;
QElemTypee;
InitQueue(&Q);
Push(&Q,1);
Push(&Q,2);
Push(&Q,3);
Push(&Q,4);
printf("Push(&Q,1);\nPush(&Q,2);\nPush(&Q,3);\nPush(&Q,4);\n");
while(Pop(&Q,&e))
{
printf("Pop(&Q,&e);\ne=%d\n",e);
}
DestoryQueue(&Q);
return0;
}
实验数据和实验结果记录
栈程序的一个运行实例如下。
队列的一个运行实例如下:
记录成绩(涂改无效)
合格□
不合格□
【五、实验结果分析】
1、分析数制转换时后进先出的特点;
2、分析如果将数转换为二进制,conversion函数的修改;
3、分析如果没有初始化栈的操作时程序的运行结果;
3、写出自己的心得体会。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 材料