栈和队列的定义.docx
《栈和队列的定义.docx》由会员分享,可在线阅读,更多相关《栈和队列的定义.docx(8页珍藏版)》请在冰豆网上搜索。
栈和队列的定义
闽江学院电子系
实验报告
学生姓名:
邓俊辉
班级:
电信2班
学号:
120101003235
课程:
数据结构与算法
一、实验题目:
栈和队列的定义及基本操作
二、实验地点:
A210
三、实验目的:
(1)、熟练掌握栈和队列的特点;
(2)、掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用;
(3)、掌握对列的定义和基本操作,熟练掌握链式队列的操作及应用,掌握环形队列的入队和出队等基本操作;
(4)、加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力;
四、实验内容:
(1)、定义顺序栈,完成栈的基本操作:
空栈、入栈、出栈、取栈顶元素;
实现十进制数与八进制数的转换,十进制数与十六进制数的转换和任意进制之间的转换;
(2)、定义链式队列,完成队列的基本操作:
入队和出队;
五、实验环境(使用的软硬件):
VC6.0
六、实验步骤及操作:
(1)10进制数转化为8进制
#include
#include
#defineMAXSIZE100
typedefstructseqstack
{
intdata[MAXSIZE];
inttop;
}seqstack;
voidsetnull(seqstack*s)
{
s->top=-1;
}
voidpush(seqstack*s,intx)
{
if((s->top)==MAXSIZE-1)
printf("ERROR!
!
\n");
else
{
s->top++;
s->data[s->top]=x;
}
}
intpop(seqstack*s,int*t)
{
if(s->top==-1)returnNULL;
else
return*t=s->data[s->top--];
}
intgettop(seqstack*t)
{
if(t->top==-1)
return0;
else
returnt->data[t->top];
}
StackEmpty(seqstack*s)
{
if(s->top==-1)
return1;
else
return0;
}
voidmain()
{
intN,t;
seqstack*s;
s=(seqstack*)malloc(sizeof(seqstack));
setnull(s);
printf("请输入要转换的十进制数:
");
scanf("%d",&N);
while(N)
{
push(s,N%8);
N=N/8;
}
printf("转换后的八进制数:
");
while(!
StackEmpty(s))
{
pop(s,&t);
printf("%d",t);
}
printf("\n");
printf("************感谢使用数制转换程序************\n");
}
(2)链队列的实现
#include
#include
#defineN10
typedefstructnode
{
intdata;
structnode*next;
}linknode;
typedefstruct
{
linknode*front,*rear;
}linkqueue;
linkqueueq;
voidiniqueue(linkqueue*q)
{
q->front=(linknode*)malloc(sizeof(linknode));
q->rear=q->front;
q->front->next=NULL;
}
voidaddqueue(linkqueue*q,intx)
{
linknode*p;
p=(linknode*)malloc(sizeof(linknode));
p->data=x;
p->next=NULL;
q->rear->next=p;
q->rear=p;
}
intoutqueue(linkqueue*q)
{
linknode*p;
if(q->rear==q->front)
returnNULL;
else
{
p=q->front;
q->front=q->front->next;
free(p);
returnq->front->data;
}
}
voidmain()
{
inti,a[N],b;
iniqueue(&q);
printf("N=%d",N);
putchar('\n');
printf("请输入N个数:
");
for(i=0;i{
scanf("%d",&a[i]);
addqueue(&q,a[i]);
}
putchar('\n');
printf(“出对后的数”);
for(i=0;i{
b=outqueue(&q);
printf("%d",b);
}
}
七、实验结果:
(1)、10进制数转化为8进制
(2)链队列的实现
八、实验总结及心得体会:
感觉就是写的很不好,要有思路。
这次试验程序好多调试不过是因为空间分配问题,以后会多注意的。
九、对本实验过程及方法、手段的改进建议:
printf("转换后的八进制数:
");
while(!
StackEmpty(s))
{
pop(s,&t);
printf("%d",t);
}
printf("\n");
报告评分:
指导教师签字:
批阅日期:
注意:
●实验报告以纸质文档形式上交。
实验报告将记入平时成绩;
●每次实验开始时,交上一次的实验报告,否则将扣除此次实验成绩。