队列实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{DeleteQueue(&Q,&x);
printf("%d ",x);
}
printf("\n\n");
}
intmain()
{int N;
printf("\nplease input the N:");
scanf("%d",&N);
PrintTriangle(N);
return 0;
}
五、实验结果(测试数据)【截图】
int GetHead(SeqQueue *Q, int *x)
{
if(Q->front==Q->rear) /*队列为空*/
return(FALSE);
*x=Q->element[Q->front];
return(TRUE); /*操作成功*/
}
四、打印杨辉三角的函数:
voidPrintTriangle(int N)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
三、队列顺序存储结构的基本操作:
杨辉三角形输出的行数可以在程序中由输入控制。
队列的基本操作代码参考如下:
#include<stdio.h>
#define TRUE 1
#define FALSE 0
队列实验
学号: 姓名:
一、实验目的:
1.掌握队列的顺序存储结构
2.掌握队列先进先出运算原则在解决实际问题中的应用
二、实验内容:
利用循环顺序队列打印杨辉三角形。杨辉三角形的特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的两个整数之和。所以在打印过程中,第i行上的元素要由第i-1行中的元素来生成。在循环队列中依次存放第i-1行上的元素,然后逐个出队并打印,同时生成第i行中间的(n-2)个元素并入队列。打印的杨辉三角形如下所示:
Q->rear=(Q->rear+1)%MAXSIZE; /*重新设置队尾指针*/
Q->element[Q->rear]=x;
return(TRUE); /*操作成功*/
}
/*出队操作*/
int DeleteQueue(SeqQueue *Q, int *x)
{
/*删除队列的队头元素,用x返回其值*/
if(Q->front==Q->rear) /*队列为空*/
return(FALSE);
Q->front=(Q->front+1)%MAXSIZE; /*重新设置队头指针*/
*x=Q->element[Q->front];
return(TRUE); /*操作成功*/
}
/*提取队列的队头元素,用x返回其值*/
#define MAXSIZE 50 /*队列的最大长度*/
typedef struct
{ intபைடு நூலகம்element[MAXSIZE]; /*队列的元素空间*/
int front; /*头指针指示器*/
int rear; /*尾指针指示器*/
}SeqQueue;
/*初始化操作*/
void InitQueue(SeqQueue *Q)
{int i,,n,x,temp;
SeqQueue Q;
InitQueue (&Q);
EnterQueue (&Q,1); /*第一行元素入队*/
for(n=2;n<=N;n++)/*从第二行开始,产生第n行元素并入队,同时打印第n-1行的元素*/
{EnterQueue (&Q,1);/*第n行的第一个元素入队*/
六、实验心得
本次实验让我懂得了,以前看到的杨辉三角的另一面,高中的时候是用函数算出这个顺序,原来也可以用程序来实现这个顺序,利用循环顺序队列打印杨辉三角形,掌握队列的顺序存储结构,掌握队列先进先出运算原则在解决实际问题中的应用。过程遇到的困难,通过同学讨论和老师的交流,解决了我们所有的问题。
EnterQueue (&Q,temp);
}
DeleteQueue (&Q,&x);
printf(“%d\n”,x); /*打印第n-1行的最后一个元素*/
EnterQueue (&Q,1);/*第n行的最后一个元素入队*/
}
while(!IsEmpty(&Q)) /*最后一行只出队,不产生新数据。*/
{
/*将*Q初始化为一个空的循环队列*/
Q->front=Q->rear=0;
}
/*入队操作*/
int EnterQueue(SeqQueue *Q, int x)
{
/*将元素x入队*/
if((Q->rear+1)%MAXSIZE==Q->front) /*队列已经满了*/
return(FALSE);
for(i=1;i<=n-2;i++) /*利用队列中第n-1行元素产生第n行的中间n-2个元素并入队*/
{DeleteQueue (&Q,&temp);
Printf(“%d”,temp); /*打印第n-1行的元素*/
GetHead(%Q,&x);
temp=temp+x; /*利用队中第n-1行元素产生第n行元素*/
printf("%d ",x);
}
printf("\n\n");
}
intmain()
{int N;
printf("\nplease input the N:");
scanf("%d",&N);
PrintTriangle(N);
return 0;
}
五、实验结果(测试数据)【截图】
int GetHead(SeqQueue *Q, int *x)
{
if(Q->front==Q->rear) /*队列为空*/
return(FALSE);
*x=Q->element[Q->front];
return(TRUE); /*操作成功*/
}
四、打印杨辉三角的函数:
voidPrintTriangle(int N)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
三、队列顺序存储结构的基本操作:
杨辉三角形输出的行数可以在程序中由输入控制。
队列的基本操作代码参考如下:
#include<stdio.h>
#define TRUE 1
#define FALSE 0
队列实验
学号: 姓名:
一、实验目的:
1.掌握队列的顺序存储结构
2.掌握队列先进先出运算原则在解决实际问题中的应用
二、实验内容:
利用循环顺序队列打印杨辉三角形。杨辉三角形的特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的两个整数之和。所以在打印过程中,第i行上的元素要由第i-1行中的元素来生成。在循环队列中依次存放第i-1行上的元素,然后逐个出队并打印,同时生成第i行中间的(n-2)个元素并入队列。打印的杨辉三角形如下所示:
Q->rear=(Q->rear+1)%MAXSIZE; /*重新设置队尾指针*/
Q->element[Q->rear]=x;
return(TRUE); /*操作成功*/
}
/*出队操作*/
int DeleteQueue(SeqQueue *Q, int *x)
{
/*删除队列的队头元素,用x返回其值*/
if(Q->front==Q->rear) /*队列为空*/
return(FALSE);
Q->front=(Q->front+1)%MAXSIZE; /*重新设置队头指针*/
*x=Q->element[Q->front];
return(TRUE); /*操作成功*/
}
/*提取队列的队头元素,用x返回其值*/
#define MAXSIZE 50 /*队列的最大长度*/
typedef struct
{ intபைடு நூலகம்element[MAXSIZE]; /*队列的元素空间*/
int front; /*头指针指示器*/
int rear; /*尾指针指示器*/
}SeqQueue;
/*初始化操作*/
void InitQueue(SeqQueue *Q)
{int i,,n,x,temp;
SeqQueue Q;
InitQueue (&Q);
EnterQueue (&Q,1); /*第一行元素入队*/
for(n=2;n<=N;n++)/*从第二行开始,产生第n行元素并入队,同时打印第n-1行的元素*/
{EnterQueue (&Q,1);/*第n行的第一个元素入队*/
六、实验心得
本次实验让我懂得了,以前看到的杨辉三角的另一面,高中的时候是用函数算出这个顺序,原来也可以用程序来实现这个顺序,利用循环顺序队列打印杨辉三角形,掌握队列的顺序存储结构,掌握队列先进先出运算原则在解决实际问题中的应用。过程遇到的困难,通过同学讨论和老师的交流,解决了我们所有的问题。
EnterQueue (&Q,temp);
}
DeleteQueue (&Q,&x);
printf(“%d\n”,x); /*打印第n-1行的最后一个元素*/
EnterQueue (&Q,1);/*第n行的最后一个元素入队*/
}
while(!IsEmpty(&Q)) /*最后一行只出队,不产生新数据。*/
{
/*将*Q初始化为一个空的循环队列*/
Q->front=Q->rear=0;
}
/*入队操作*/
int EnterQueue(SeqQueue *Q, int x)
{
/*将元素x入队*/
if((Q->rear+1)%MAXSIZE==Q->front) /*队列已经满了*/
return(FALSE);
for(i=1;i<=n-2;i++) /*利用队列中第n-1行元素产生第n行的中间n-2个元素并入队*/
{DeleteQueue (&Q,&temp);
Printf(“%d”,temp); /*打印第n-1行的元素*/
GetHead(%Q,&x);
temp=temp+x; /*利用队中第n-1行元素产生第n行元素*/