淮海工学院数据结构第2次实验Word文档格式.docx
《淮海工学院数据结构第2次实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《淮海工学院数据结构第2次实验Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
3、实现循环队列的创建、进队、出队等基本操作(数据元素类型自己选取,如整型、字符型等),并实时给出队列的操作变化状态;
4、实现链式队列的创建、进队、出队等基本操作(数据元素类型自己选取,如整型、字符型等),并实时给出队列的操作变化状态;
(二)选做题(视自己能力而定,数量不限):
任选一个或多个源程序(已经发给学委),并阅读、调试和运行程序,而后给出程序功能分析和实例运行演示;
1、实现表达式求值算法程序;
2、用递归算法实现汉诺塔问题算法程序;
3、使用循环队列实现打印杨辉三角形算法程序。
3实验步骤与源程序
第一题:
#include<
stdio.h>
stdlib.h>
#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)
top==Size-1?
//判断栈满为满是真反之为假
intPush(SeqStack*S,intx)//压栈
if(S->
top==Size-1)
return(FALSE);
S->
top++;
elem[S->
top]=x;
return(TRUE);
intPop(SeqStack*S,int*x)//弹出
{
top==-1)
else
{
*x=S->
top];
top--;
return(TRUE);
}
voidmain()
SeqStackS;
intx,y,i,l;
InitStack(&
S);
if(!
IsFull(&
S))
printf("
栈空:
\n"
);
printf("
输入要压入的元素个数(50以内):
scanf("
%d"
&
l);
输入要压入的元素:
for(i=0;
i<
l;
i++)
scanf("
y);
Push(&
S,y);
弹出:
while(!
IsEmpty(&
Pop(&
S,&
x);
%d\n"
x);
第二题:
typedefstructnode
intdata;
structnode*next;
}LinkStackNode;
typedefLinkStackNode*LinkStack;
intIsEmpty(LinkStackS)
returnNULL==S->
next?
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;
next=S->
next;
next=temp;
intPop(LinkStackS,int*x)
LinkStackNode*temp;
temp=S->
if(temp==NULL)
next=temp->
*x=temp->
data;
free(temp);
LinkStackNode*s;
s);
intx,i,l;
if(IsEmpty(s))
栈空\n"
请输入压入元素个数(50以内):
请输入压入元素:
Push(s,x);
IsEmpty(s))
{
Pop(s,&
printf("
}
第三题:
#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)
element[Q->
rear]=x;
rear=(Q->
rear+1)%MAXSIZE;
intDeleteQueue(SeqQueue*Q,int*x)
if(Q->
front==Q->
rear)
*x=Q->
front];
front=(Q->
front+1)%MAXSIZE;
intIsEmpty(SeqQueue*Q)
return(TRUE);
SeqQueues;
InitQueue(&
if(IsEmpty(&
s))
此时为空队列\n"
请输入进队元素个数\n"
请输入元素\n"
EnterQueue(&
s,x);
出队:
DeleteQueue(&
s,&
第四题:
typedefstructNode
structNode*next;
}LinkQueueNode;
LinkQueueNode*front;
LinkQueueNode*rear;
}LinkQueue;
intIsEmpty(LinkQueue*Q)
returnQ->
front==Q->
rear?
intInitQueue(LinkQueue*Q)
front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));
front!
=NULL)
Q->
rear=Q->
front;
front->
next=NULL;
return(TRUE);
elsereturn(FALSE);
intEnterQueue(LinkQueue*Q,intx)
LinkQueueNode*NewNode;
NewNode=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));
if(NewNode!
NewNode->
rear->
next=NewNode;
rear=NewNode;
intDeleteQueue(LinkQueue*Q,int*x)
LinkQueueNode*p;
rear)
p=Q->
next;
next=p->
rear==p)
*x=p->
free(p);
return(TRUE);
LinkQueueq;
q);
if(IsEmpty(&
q))
请输入进队元个数素\n"
请输入元素:
q,x);
q,&
4测试数据与实验结果(可以抓图粘贴)
5结果分析与实验体会
开始在编写第一题时,将所有代码完成后一直报错,反复检查代码没有错误,后来看到头文件名是#include<
iostream.h>
因为C++习惯导致错误,后来改为<
就正确了,而且这些题目都是很基础的题目,在之后的编程中也遇到很多问题,如在第一题输出用printf("
时,无报错,但输出是奇怪数值,绞尽脑汁都找不出问题所在,但是我注意到输出的数值都是一样的,猜测到可能是printf("
中&
x是错误,改为printf("
后正确,可是还是说不出具体的原因,这些都表明自己的基础差,还需要多巩固基础知识。
通过这次试验编程,对栈及队列加深理解,熟记了一些代码,了解自己不足之处,收获不少。