大数据结构实验报告材料二.docx

上传人:b****0 文档编号:12609058 上传时间:2023-04-20 格式:DOCX 页数:15 大小:156.78KB
下载 相关 举报
大数据结构实验报告材料二.docx_第1页
第1页 / 共15页
大数据结构实验报告材料二.docx_第2页
第2页 / 共15页
大数据结构实验报告材料二.docx_第3页
第3页 / 共15页
大数据结构实验报告材料二.docx_第4页
第4页 / 共15页
大数据结构实验报告材料二.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

大数据结构实验报告材料二.docx

《大数据结构实验报告材料二.docx》由会员分享,可在线阅读,更多相关《大数据结构实验报告材料二.docx(15页珍藏版)》请在冰豆网上搜索。

大数据结构实验报告材料二.docx

大数据结构实验报告材料二

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、写出自己的心得体会。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1