淮海工学院数据结构第2次实验.docx

上传人:b****6 文档编号:3969160 上传时间:2022-11-26 格式:DOCX 页数:13 大小:137.58KB
下载 相关 举报
淮海工学院数据结构第2次实验.docx_第1页
第1页 / 共13页
淮海工学院数据结构第2次实验.docx_第2页
第2页 / 共13页
淮海工学院数据结构第2次实验.docx_第3页
第3页 / 共13页
淮海工学院数据结构第2次实验.docx_第4页
第4页 / 共13页
淮海工学院数据结构第2次实验.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

淮海工学院数据结构第2次实验.docx

《淮海工学院数据结构第2次实验.docx》由会员分享,可在线阅读,更多相关《淮海工学院数据结构第2次实验.docx(13页珍藏版)》请在冰豆网上搜索。

淮海工学院数据结构第2次实验.docx

淮海工学院数据结构第2次实验

淮海工学院计算机科学系

实验报告书

课程名:

《数据结构》

题目:

线性数据结构实验

(栈与对立队列及其应用)

班级:

学号:

2012122693

姓名:

 

线性表算法实现与应用报告要求

1目的与要求:

1)掌握栈与队列的数据类型描述及特点;

2)掌握栈的顺序和链式存储存表示与基本算法的实现;

3)掌握队列的链式和循环存储表示与基本操作算法实现;

4)掌握栈与队列在实际问题中的应用和基本编程技巧;

5)按照实验题目要求,独立完成实际程序的编写编写、调试和运行,并通过用例数的运行过程抓获相关屏面验证程序设计的正确性;

7)由于国庆节占用授课时间,所以本次实验将不做统一上机安排,要求同学们节日期间自行完成实验任务,并于第6周周4以前按时提交实验报告。

2实验内容或题目

(一)必做题:

1、实现顺序栈的创建(初始化)、压入(插入)、弹出(删除)操作(数据元素类型自己选取,如整型、字符型等),并给出栈的每次操作变化状态;

2、实现链栈的创建(初始化)、压入(插入)、弹出(删除)操作(数据元素类型自己选取,如整型、字符型等),要求给出栈的操作变化过程;

3、实现循环队列的创建、进队、出队等基本操作(数据元素类型自己选取,如整型、字符型等),并实时给出队列的操作变化状态;

4、实现链式队列的创建、进队、出队等基本操作(数据元素类型自己选取,如整型、字符型等),并实时给出队列的操作变化状态;

(二)选做题(视自己能力而定,数量不限):

任选一个或多个源程序(已经发给学委),并阅读、调试和运行程序,而后给出程序功能分析和实例运行演示;

1、实现表达式求值算法程序;

2、用递归算法实现汉诺塔问题算法程序;

3、使用循环队列实现打印杨辉三角形算法程序。

3实验步骤与源程序

第一题:

#include

#include

#defineTRUE1

#defineFALSE0

#defineSize50

typedefstruct

{

intelem[Size];

inttop;

}SeqStack;

 

voidInitStack(SeqStack*S)

{

S->top=-1;

}

 

intIsEmpty(SeqStack*S)

{

return(S->top==-1?

TRUE:

FALSE);//判断栈空为空是真反之为假

}

intIsFull(SeqStack*S)

{

return(S->top==Size-1?

TRUE:

FALSE);//判断栈满为满是真反之为假

}

intPush(SeqStack*S,intx)//压栈

{

if(S->top==Size-1)

return(FALSE);

S->top++;

S->elem[S->top]=x;

return(TRUE);

}

intPop(SeqStack*S,int*x)//弹出

{

if(S->top==-1)

return(FALSE);

else

{

*x=S->elem[S->top];

S->top--;

return(TRUE);

}

}

 

voidmain()

{

SeqStackS;

intx,y,i,l;

InitStack(&S);

if(!

IsFull(&S))

printf("栈空:

\n");

printf("输入要压入的元素个数(50以内):

\n");

scanf("%d",&l);

printf("输入要压入的元素:

\n");

for(i=0;i

{

scanf("%d",&y);

Push(&S,y);

}

printf("弹出:

\n");

while(!

IsEmpty(&S))

{

Pop(&S,&x);

printf("%d\n",x);

}

}

第二题:

#defineTRUE1

#defineFALSE0

#include

#include

typedefstructnode

{

intdata;

structnode*next;

}LinkStackNode;

typedefLinkStackNode*LinkStack;

intIsEmpty(LinkStackS)

{

returnNULL==S->next?

TRUE:

FALSE;

}

intInitStack(LinkStack*S)

{

*S=(node*)malloc(sizeof(node));

if(NULL==*S)

returnFALSE;

(*S)->next=NULL;

returnTRUE;

}

intPush(LinkStackS,intx)

{

LinkStackNode*temp;

temp=(LinkStackNode*)malloc(sizeof(LinkStackNode));

if(temp==NULL)

return(FALSE);

temp->data=x;

temp->next=S->next;

S->next=temp;

return(TRUE);

}

intPop(LinkStackS,int*x)

{

LinkStackNode*temp;

temp=S->next;

if(temp==NULL)

return(FALSE);

S->next=temp->next;

*x=temp->data;

free(temp);

return(TRUE);

}

voidmain()

{

LinkStackNode*s;

InitStack(&s);

intx,i,l;

if(IsEmpty(s))

printf("栈空\n");

printf("请输入压入元素个数(50以内):

\n");

scanf("%d",&l);

printf("请输入压入元素:

\n");

for(i=0;i

{

scanf("%d",&x);

Push(s,x);

}

printf("弹出:

\n");

while(!

IsEmpty(s))

{

Pop(s,&x);

printf("%d\n",x);

}

}

第三题:

#include

#include

#defineTRUE1

#defineFALSE0

#defineMAXSIZE50

typedefstruct

{

intelement[MAXSIZE];

intfront;

intrear;

}SeqQueue;

 

voidInitQueue(SeqQueue*Q)

{

Q->front=Q->rear=0;

}

intEnterQueue(SeqQueue*Q,intx)

{

if((Q->rear+1)%MAXSIZE==Q->front)

return(FALSE);

Q->element[Q->rear]=x;

Q->rear=(Q->rear+1)%MAXSIZE;

return(TRUE);

}

intDeleteQueue(SeqQueue*Q,int*x)

{

if(Q->front==Q->rear)

return(FALSE);

*x=Q->element[Q->front];

Q->front=(Q->front+1)%MAXSIZE;

return(TRUE);

}

 

intIsEmpty(SeqQueue*Q)

{

if(Q->front==Q->rear)

return(TRUE);

else

return(FALSE);

}

voidmain()

{

SeqQueues;

InitQueue(&s);

intx,i,l;

if(IsEmpty(&s))

printf("此时为空队列\n");

printf("请输入进队元素个数\n");

scanf("%d",&l);

printf("请输入元素\n");

for(i=0;i

{

scanf("%d",&x);

EnterQueue(&s,x);

}

printf("出队:

\n");

while(!

IsEmpty(&s))

{

DeleteQueue(&s,&x);

printf("%d\n",x);

}

if(IsEmpty(&s))

printf("此时为空队列\n");

}

第四题:

#include

#include

#defineTRUE1

#defineFALSE0

typedefstructNode

{

intdata;

structNode*next;

}LinkQueueNode;

typedefstruct

{

LinkQueueNode*front;

LinkQueueNode*rear;

}LinkQueue;

intIsEmpty(LinkQueue*Q)

{

returnQ->front==Q->rear?

TRUE:

FALSE;

}

 

intInitQueue(LinkQueue*Q)

{

Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));

if(Q->front!

=NULL)

{

Q->rear=Q->front;

Q->front->next=NULL;

return(TRUE);

}

elsereturn(FALSE);

}

intEnterQueue(LinkQueue*Q,intx)

{

LinkQueueNode*NewNode;

NewNode=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));

if(NewNode!

=NULL)

{

NewNode->data=x;

NewNode->next=NULL;

Q->rear->next=NewNode;

Q->rear=NewNode;

return(TRUE);

}

elsereturn(FALSE);

}

intDeleteQueue(LinkQueue*Q,int*x)

{

LinkQueueNode*p;

if(Q->front==Q->rear)

return(FALSE);

p=Q->front->next;

Q->front->next=p->next;

if(Q->rear==p)

Q->rear=Q->front;

*x=p->data;

free(p);

return(TRUE);

}

voidmain()

{

LinkQueueq;

intx,i,l;

InitQueue(&q);

if(IsEmpty(&q))

printf("此时为空队列\n");

printf("请输入进队元个数素\n");

scanf("%d",&l);

printf("请输入元素:

\n");

for(i=0;i

{

scanf("%d",&x);

EnterQueue(&q,x);

}

printf("出队:

\n");

for(i=0;i

{

DeleteQueue(&q,&x);

printf("%d\n",x);

}

if(IsEmpty(&q))

printf("此时为空队列\n");

}

4测试数据与实验结果(可以抓图粘贴)

5结果分析与实验体会

开始在编写第一题时,将所有代码完成后一直报错,反复检查代码没有错误,后来看到头文件名是#include因为C++习惯导致错误,后来改为就正确了,而且这些题目都是很基础的题目,在之后的编程中也遇到很多问题,如在第一题输出用printf("%d\n",&x);时,无报错,但输出是奇怪数值,绞尽脑汁都找不出问题所在,但是我注意到输出的数值都是一样的,猜测到可能是printf("%d\n",&x);中&x是错误,改为printf("%d\n",x);后正确,可是还是说不出具体的原因,这些都表明自己的基础差,还需要多巩固基础知识。

通过这次试验编程,对栈及队列加深理解,熟记了一些代码,了解自己不足之处,收获不少。

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

当前位置:首页 > 高中教育 > 小学教育

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

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