数据结构栈及队列实验报告 C语言版.docx
- 文档编号:27980627
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:24
- 大小:86.79KB
数据结构栈及队列实验报告 C语言版.docx
《数据结构栈及队列实验报告 C语言版.docx》由会员分享,可在线阅读,更多相关《数据结构栈及队列实验报告 C语言版.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构栈及队列实验报告C语言版
XXXX学院
计算机课程实验报告
(201X~201X年度第X学期)
专业
课程 数据结构
班级
组别
教师
琼州学院电子信息工程学院制
实验报告填写说明
1、填写一律用钢笔或圆珠笔填写,要求字迹工整,条理清晰。
2、“实验题目”可以填写章节名称或用文字表述。
3、“实验目的”要逐条列出,“实验内容”以简练的文字进行概括。
4、“附注”处填写实验注意事项或调试过程,以及实验中出现的异常情况和解决方法。
5、“教师批阅”处有课任老师填写评语,给出实验成绩,并作为平时成绩,参与期末成绩总评。
6、封面和实验报告填写说明正反面打印在一张纸上。
201X年XX月XX日
实验项目:
栈及队列的链式和线性存储以及相关操作实现
实验目的:
1.掌握数据结构中栈及队列的链式和线性存储结构操作;
2.了解数据结构中栈及队列的基本操作原理
3.掌握C语言中基本程序设计的方法.
4.掌握基本测试方法。
实验仪器:
计算机、C语言版数据结构相关实验题集、编写程序软件
实验规划:
(包括函数说明、公共变量说明、测试说明等)
公共变量声明:
#include
#include
#defineOK1
#defineERROR0
函数说明:
/******************************
Ⅰ、栈的链式存储以及相关操作实现
*******************************/
typedefstructstack
{
intdata;
structTYPE*next;
}ElemType;
栈的初始化:
1.ElemType*InitStack();
进栈:
2.intPush(ElemType*head,inte);
出栈:
3.intPop(ElemType*head,int*e);
显示:
4.intDisplayStack(ElemType*Head);
返回顶元素:
5.intGettop(ElemType*head);
小组各成员工作分配情况表:
XXX:
统一定义常量,结构体模版,函数格式(参数、返回值);讲解编写流程,检查编写函数。
XXX:
编写测试及美化程序
XXX:
编写出栈函数
XXX:
编写初始化及取顶函数。
XXX:
编写进栈函数。
XXX:
编写打印栈顶函数。
实验内容及步骤(或程序清单):
内容:
此栈采用链式存储,实现了建栈、进栈、出栈、打印等功能。
栈链表实现:
/***************************
Time:
XX-XX-201X
Made:
XXXXX
use:
Stackbychain
****************************/
#include
#include
#defineOK1
#defineERROR0
typedefstructstack
//Defineaelemtypefordata
{
intdata;
structTYPE*next;
}ElemType;
ElemType*InitStack()
//Toinitializeanemptystack
{
ElemType*S;
do{
S=(ElemType*)malloc(sizeof(ElemType));
}while(!
S);
S->data=0;
S->next=NULL;
printf("InitOK!
\n");
returnS;
}
intPush(ElemType*head,inte)
{
ElemType*p=NULL,*q=NULL;
p=head;
do{
q=(ElemType*)malloc(sizeof(ElemType));
}while(!
q);
q->next=p->next;
p->next=q;
q->data=e;
returnOK;
}
intPop(ElemType*head,int*e)
{
ElemType*p,*q=NULL;
p=head;
if(head->next==NULL)
{
printf("TheStackisempty!
\n");
returnERROR;
}
q=head->next;
p->next=q->next;
*e=q->data;
free(q);
returnOK;
}
intDisplayStack(ElemType*Head)
//Justfortext
{
ElemType*p=NULL;
p=Head->next;
ElemType*E=InitStack();
ElemType*e;
if(!
p)returnERROR;
for(;p!
=NULL;p=p->next)
{
Push(E,p->data);
}
e=E->next;
for(;e!
=NULL;e=e->next)
{
printf("%5d",e->data);
}
printf("\n");
returnOK;
}
intGettop(ElemType*head)
{
return(*head)->next->data;
}
函数说明:
/******************************
Ⅱ、栈的线性存储以及相关操作实现
*******************************/
typedefstructASTACK
{
ElemType*top;//栈顶指针(偏移指针)
ElemType*base;//栈基指针
intlength;//栈长度
}Stack;
1.初始化:
Stack*InitStack()
2.进栈:
intPush(Stack*S,ElemTypee)
3.出栈:
ElemTypePop(Stack*S,ElemType&e)
4.显示:
intPrintStack(Stack*S)
5.返回栈顶元素:
ElemTypeGetTop(Stack*S)
小组各成员工作分配情况表:
XXX:
统一定义常量,结构体模版,函数格式(参数、返回值);讲解编写流程,检查编写函数。
XXX:
编写进栈函数及注释
XXX:
编写进栈函数
XXX:
编写测试及美化函数。
XXX:
编写出栈及显示函数。
XXX:
编写初始化函数。
实验内容及步骤(或程序清单):
内容:
此栈采用线性存储,实现了建栈、进栈、出栈、打印栈等功能。
线性栈的实现:
/*****************************
Times:
XX-XX-201X
owner:
XXXXX
Use:
Stack
*****************************/
#include
#include
#defineOK1
#defineERROR0
#defineElemTypeint//用自定义代表数据类型方便后来程序修改
#defineSTACK_INIT_SIZE100//初始化时栈的容量
#defineLISTINCREMENT10//当初始化容量不够时每次所增加的容量
intTT=1;
//定义结构体的类型
typedefstructASTACK
{
ElemType*top;//栈顶指针(偏移指针)
ElemType*base;//栈基指针
intlength;//栈长度
}Stack;
//初始化:
Stack*InitStack(){
Stack*S;
S=(Stack*)malloc(sizeof(Stack));
do{
(*S).base=(ElemType*)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
}while(!
((*S).base));
S->top=S->base;
S->length=STACK_INIT_SIZE;
returnS;
}
//进栈:
intPush(Stack*S,ElemTypee)
{
if((S->top-S->base)>=S->length)//如果栈满,则增加容量
{
do{
S->base=(ElemType*)realloc(S->base,
sizeof(ElemType)*(STACK_INIT_SIZE+LISTINCREMENT));
}while(!
(S->base));
S->length=STACK_INIT_SIZE+LISTINCREMENT;
}
*(S->top)=e;//将值e传给栈顶
++(*S).top;//栈顶指针上移,为下一个数据做准备
returnOK;
}
//出栈:
ElemTypePop(Stack*S,ElemType&e)
//如果栈不为空,则删除栈顶元素并赋给e
{
if(S->top==S->base)
{
returnERROR;
}
e=*(S->top-1);//将栈顶值给e
--(S->top);//将栈顶指针下移一位
returnOK;
}
//返回栈顶元素:
ElemTypeGetTop(Stack*S)
{
return*((*S).top-1);
}
//显示栈所有元素:
intPrintStack(Stack*S)//Onlyusedfortest
{
inti=0;
ElemType*p;
p=S->base;
for(p;p
{
printf("%5d",*p);
i++;
}
returni;
}
/*********************************
附上JAVA的线性栈实现:
**********************************/
publicclassstackofInt{
privateint[]elemtype=newint[100];
privateintsize=0;
publicstackofInt(){
}
publicstackofInt(inte){
this.elemtype=newint[e];
}
publicvoidpush(inte){
if(size>elemtype.length){
int[]temp=newint[elemtype.length+10];
System.arraycopy(elemtype,0,temp,0,elemtype.length);
elemtype=temp;
}
elemtype[size]=e;
++size;
}
publicintpop(){
if(size==0){
System.out.println("Thestackisempty!
");
System.exit(0);
return0;
}
else{
inta=elemtype[size-1];
--size;
returna;
}
}
publicbooleanisempty(){
if(size==0)
returntrue;
returnfalse;
}
publicvoidtoempty(){size=0;}
publicintgettop(){returnelemtype[size-1];}
publicvoidprintstack(){
inti=1;
while(i<=size){
System.out.print(elemtype[i-1]+"");
i++;
}
}
publicstaticvoidmain(String[]agrs){
stackofIntstack=newstackofInt();
for(inti=1;i<=10;i++)stack.push(i);
stack.printstack();
}
}
/************************************
Ⅲ、队列链式存储以及相关操作实现
*************************************/
公共变量声明:
#include"StackFun.h"
函数说明:
定义结构体:
typedefstructQLink
{
intdata;
structQLink*next;
}ElemType;
typedefstructQUEUE
{
ElemType*front;
ElemType*rear;
intlength;
}LinkQueue;
小组各成员工作分配情况表:
XXX:
统一定义常量,结构体模版,函数格式(参数、返回值);讲解编写流程,检查编写函数。
XXX:
编写进队函数及注释
XXX:
编写出队函数
XXX:
编写测试函数及美化。
XXX:
编写取顶及显示函数。
XXX:
编写初始化函数。
实验内容及步骤(或程序清单):
内容:
此队采用链式存储,实现了建队、进队、出队、打印队等功能。
队的链式实现:
/*********************
Times:
XX-XX-201X
owner:
XXXXX
Use:
Queue
*********************/
#include"StackFun.h"
#include
#include
#defineOK1
#defineERROR0
typedefstructQNode
/**************************
Defineanewelemtype
forQueue
***************************/
{
intdata;
structQNode*next;
}ElemType;
typedefstructQUEUE
/**********************************
*front->ThetopptrofQueue
*rear->TherearptrofQueue
length->ThelengthofQueue
***********************************/
{
ElemType*front;
ElemType*rear;
intlength;
}LinkQueue;
LinkQueue*InitQueue()
/*************************
Initializethequeue!
Ifsuccessful,printOK;
**************************/
{
LinkQueue*Q=NULL;
Q=(LinkQueue*)malloc(sizeof(LinkQueue));
do
{
(*Q).front=(*Q).rear=(ElemType*)malloc(sizeof(ElemType));
}
while(!
(*Q).front);
(*Q).length=0;
(*Q).front->next=NULL;
printf("CREATEAEMPTYQUEUEOK!
\n");
returnQ;
}
intDestroyQueue(LinkQueue*Q)
/********************************************
Likehisname,Destroythequeuetomakethe
queueempty;
*********************************************/
{
while((*Q).front)
{
(*Q).rear=(*Q).front->next;
free((*Q).front);
(*Q).front=(*Q).rear;
}
returnOK;
}
intEnterQueue(LinkQueue*Q,inte)
/***************************************
Enteranumber"e"totherearofQueue
****************************************/
{
ElemType*p;
do{
p=(ElemType*)malloc(sizeof(ElemType));
}while(!
p);
p->data=e;
p->next=NULL;
(*Q).rear->next=p;
(*Q).rear=p;
++(Q->length);
returnOK;
}
intDeleteQueue(LinkQueue*Q,int*e)
/******************************************
IftheQueueisn'temtpy,takethetopof
Queuetoe.elsereturnERROR.Sowecan
decidehowtodofromthereturnedvalue;
*******************************************/
{
ElemType*p;
if((*Q).front==(*Q).rear)returnERROR;
p=(*Q).front->next;
*e=p->data;
(*Q).front->next=p->next;
--(Q->length);
if((*Q).rear==p)
{
(*Q).rear=(*Q).front;
}
free(p);
returnOK;
}
intDisplayQueue(LinkQueue*Q)
/*******************************************
JustforText:
Ifitcanbedisplay,goaheadandreturnOK;
elsereturnERROR.
*********************************************/
{
ElemType*p;
elem_type*S;
S=InitStack();
if(Q->front==Q->rear)
{
printf("TheQueueisemtpy!
\n");
returnERROR;
}
p=Q->front->next;
do
{
Push(S,p->data);
p=p->next;
}
while(p!
=NULL);
DisplayStack(S);
returnOK;
}
intGetHead(LinkQueue*Q)
/**********************************
returnthefrontofLinkQueue
***********************************/
{
if((*Q).front==(*Q).rear)
{
printf("TheQueueisempty!
\n");
exit(0);
}
else
return(*Q).front->next->data;
}
/*************************************
Ⅴ、队列线性存储以及相关操作实现
**************************************/
函数说明:
定义结构体:
typedefstructQUEUE
{
ElemType*base;
ElemTypefront;
}LinkQueue;
1.队的初始化:
LinkQueue*InitQueue();
2.进队:
intEnterQueue(LinkQueue*Q,inte);
3.出队:
intDeleteQueue(LinkQueue*Q,int*e);
4.销毁队:
intDestroyQueue(LinkQueue*Q)
5.显示:
intDestroyQueue(LinkQueue*Q)
XXX:
统一定义常量,结构体模版,函数格式(参数、返回值);讲解编写流程,检查编写函数。
XXX:
编写进队函数及注释
XXX:
编写出队函数
XXX:
编写测试函数及美化。
XXX:
编写显示函数。
XXX:
编写初始化函数。
实验内容及步骤(或程序清单):
内容:
此队采用线性存储,实现了建队、进队、出队、打印队等功能。
队的线性实现:
/*****************************
Times:
XX-XX-201X
owner:
XXXXX
Use:
Queue_S
*******************************/
#include
#include
#defineOK1
#defineERROR0
#defineElemTypeint
#defineMAXSIZE5
typedefstructQUEUE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构栈及队列实验报告 C语言版 数据结构 队列 实验 报告 语言版