高分,急。。循环队列实现约瑟夫环挑错。
#include<stdio.h>#include<malloc.h>#defineMAXSIZE100typedefstruct//定义队头{intelem[MAXSI...
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef struct//定义队头
{
int elem[MAXSIZE];
int front;
int rear;
}Quque;
void initQue(Quque **q) //初始化
{
(*q)->front=0;
(*q)->rear=0;
}
int isFull(Quque *q)
{
if(q->front==(q->rear+1)%MAXSIZE) //满反1,否则反0
return 1;
else
return 0;
}
int insertQue(Quque **q,int elem)//插入元素
{
if(isFull(*q)) return -1; //满反-1
(*q)->elem[(*q)->rear]=elem;
(*q)->rear=((*q)->rear+1)%MAXSIZE; //插入元素
return 0;
}
int isEmpty(Quque *q)//判空,空反1
{
if(q->front==q->rear)
return 1;
else
return 0;
}
int deleteQue(Quque **q,int *pelem)//删除元素
{
if(isEmpty(*q))
return 0; //空反0
*pelem=(*q)->elem[(*q)->front];
(*q)->front =((*q)->front +1)%MAXSIZE;
return 0; //删除成功反0
}
void main()
{
int k=1,elem=0;
int n=8;
int i=4;
int m=1;// 8 4 1
int j=1;
int A[8]={0};
int e=2;
int ak=0;
Quque *q=(Quque *)malloc(sizeof(Quque));
initQue(&q); //初始化
for(k=1;k<=n;k++) //生成环状队列k={1,2,3,...,n}
{
insertQue(&q,k);
}
printf("生成的循环队列为;\n");//输出
for(k=1;k<=n;k++)
{
deleteQue(&q,&elem);
printf(" %d ",elem);
insertQue(&q,elem);//删除后重新插入
}
printf("\n\n约瑟夫环为;\n");
//----------ABOVE ALLRIGHT--------------
//约瑟夫环实现
for(k=0;k<i; k++) //置报数位置i=4为队头
{
deleteQue(&q,&e); //出队:删除并用e返回队头元素。
insertQue(&q,e); //入队:在队尾追加一个元素e。
}
while(!isEmpty(q)) //生成新序列于A中
{ //O(n)
for(j=0;j<=m; j++) //m=1;O(m),从队头开始报数,1..(m-1)置队尾
{
deleteQue(&q,&e);
insertQue(&q,e);
}
deleteQue(&q,&e);
A[ak++]=e; //生成新序列于A中
}
for (k=1;k<=n;k++) //输出
{
printf(" %d ",A);
}
printf("\n");
}
总是有错误。麻烦调试下。。尽快吧。谢谢了! 展开
#include<malloc.h>
#define MAXSIZE 100
typedef struct//定义队头
{
int elem[MAXSIZE];
int front;
int rear;
}Quque;
void initQue(Quque **q) //初始化
{
(*q)->front=0;
(*q)->rear=0;
}
int isFull(Quque *q)
{
if(q->front==(q->rear+1)%MAXSIZE) //满反1,否则反0
return 1;
else
return 0;
}
int insertQue(Quque **q,int elem)//插入元素
{
if(isFull(*q)) return -1; //满反-1
(*q)->elem[(*q)->rear]=elem;
(*q)->rear=((*q)->rear+1)%MAXSIZE; //插入元素
return 0;
}
int isEmpty(Quque *q)//判空,空反1
{
if(q->front==q->rear)
return 1;
else
return 0;
}
int deleteQue(Quque **q,int *pelem)//删除元素
{
if(isEmpty(*q))
return 0; //空反0
*pelem=(*q)->elem[(*q)->front];
(*q)->front =((*q)->front +1)%MAXSIZE;
return 0; //删除成功反0
}
void main()
{
int k=1,elem=0;
int n=8;
int i=4;
int m=1;// 8 4 1
int j=1;
int A[8]={0};
int e=2;
int ak=0;
Quque *q=(Quque *)malloc(sizeof(Quque));
initQue(&q); //初始化
for(k=1;k<=n;k++) //生成环状队列k={1,2,3,...,n}
{
insertQue(&q,k);
}
printf("生成的循环队列为;\n");//输出
for(k=1;k<=n;k++)
{
deleteQue(&q,&elem);
printf(" %d ",elem);
insertQue(&q,elem);//删除后重新插入
}
printf("\n\n约瑟夫环为;\n");
//----------ABOVE ALLRIGHT--------------
//约瑟夫环实现
for(k=0;k<i; k++) //置报数位置i=4为队头
{
deleteQue(&q,&e); //出队:删除并用e返回队头元素。
insertQue(&q,e); //入队:在队尾追加一个元素e。
}
while(!isEmpty(q)) //生成新序列于A中
{ //O(n)
for(j=0;j<=m; j++) //m=1;O(m),从队头开始报数,1..(m-1)置队尾
{
deleteQue(&q,&e);
insertQue(&q,e);
}
deleteQue(&q,&e);
A[ak++]=e; //生成新序列于A中
}
for (k=1;k<=n;k++) //输出
{
printf(" %d ",A);
}
printf("\n");
}
总是有错误。麻烦调试下。。尽快吧。谢谢了! 展开
1个回答
展开全部
数组输出错了:
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef struct//定义队头
{
int elem[MAXSIZE];
int front;
int rear;
}Quque;
void initQue(Quque **q) //初始化
{
(*q)->front=0;
(*q)->rear=0;
}
int isFull(Quque *q)
{
if(q->front==(q->rear+1)%MAXSIZE) //满反1,否则反0
return 1;
else
return 0;
}
int insertQue(Quque **q,int elem)//插入元素
{
if(isFull(*q)) return -1; //满反-1
(*q)->elem[(*q)->rear]=elem;
(*q)->rear=((*q)->rear+1)%MAXSIZE; //插入元素
return 0;
}
int isEmpty(Quque *q)//判空,空反1
{
if(q->front==q->rear)
return 1;
else
return 0;
}
int deleteQue(Quque **q,int *pelem)//删除元素
{
if(isEmpty(*q))
return 0; //空反0
*pelem=(*q)->elem[(*q)->front];
(*q)->front =((*q)->front +1)%MAXSIZE;
return 0; //删除成功反0
}
void main()
{
int k=1,elem=0;
int n=8;
int i=4;
int m=1;// 8 4 1
int j=1;
int A[8]={0};
int e=2;
int ak=0;
Quque *q=(Quque *)malloc(sizeof(Quque));
initQue(&q); //初始化
for(k=1;k<=n;k++) //生成环状队列k={1,2,3,...,n}
{
insertQue(&q,k);
}
printf("生成的循环队列为;\n");//输出
for(k=1;k<=n;k++)
{
deleteQue(&q,&elem);
printf(" %d ",elem);
insertQue(&q,elem);//删除后重新插入
}
printf("\n\n约瑟夫环为;\n");
//----------ABOVE ALLRIGHT--------------
//约瑟夫环实现
for(k=0;k<i; k++) //置报数位置i=4为队头
{
deleteQue(&q,&e); //出队:删除并用e返回队头元素。
insertQue(&q,e); //入队:在队尾追加一个元素e。
}
while(!isEmpty(q)) //生成新序列于A中
{ //O(n)
for(j=0;j<=m; j++) //m=1;O(m),从队头开始报数,1..(m-1)置队尾
{
deleteQue(&q,&e);
insertQue(&q,e);
}
deleteQue(&q,&e);
A[ak++]=e; //生成新序列于A中
}
for (k=0;k<n;k++) //输出
{
printf(" %d ",*(A+k));
}
printf("\n如果满意记得给分,哈哈;\n");
}
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef struct//定义队头
{
int elem[MAXSIZE];
int front;
int rear;
}Quque;
void initQue(Quque **q) //初始化
{
(*q)->front=0;
(*q)->rear=0;
}
int isFull(Quque *q)
{
if(q->front==(q->rear+1)%MAXSIZE) //满反1,否则反0
return 1;
else
return 0;
}
int insertQue(Quque **q,int elem)//插入元素
{
if(isFull(*q)) return -1; //满反-1
(*q)->elem[(*q)->rear]=elem;
(*q)->rear=((*q)->rear+1)%MAXSIZE; //插入元素
return 0;
}
int isEmpty(Quque *q)//判空,空反1
{
if(q->front==q->rear)
return 1;
else
return 0;
}
int deleteQue(Quque **q,int *pelem)//删除元素
{
if(isEmpty(*q))
return 0; //空反0
*pelem=(*q)->elem[(*q)->front];
(*q)->front =((*q)->front +1)%MAXSIZE;
return 0; //删除成功反0
}
void main()
{
int k=1,elem=0;
int n=8;
int i=4;
int m=1;// 8 4 1
int j=1;
int A[8]={0};
int e=2;
int ak=0;
Quque *q=(Quque *)malloc(sizeof(Quque));
initQue(&q); //初始化
for(k=1;k<=n;k++) //生成环状队列k={1,2,3,...,n}
{
insertQue(&q,k);
}
printf("生成的循环队列为;\n");//输出
for(k=1;k<=n;k++)
{
deleteQue(&q,&elem);
printf(" %d ",elem);
insertQue(&q,elem);//删除后重新插入
}
printf("\n\n约瑟夫环为;\n");
//----------ABOVE ALLRIGHT--------------
//约瑟夫环实现
for(k=0;k<i; k++) //置报数位置i=4为队头
{
deleteQue(&q,&e); //出队:删除并用e返回队头元素。
insertQue(&q,e); //入队:在队尾追加一个元素e。
}
while(!isEmpty(q)) //生成新序列于A中
{ //O(n)
for(j=0;j<=m; j++) //m=1;O(m),从队头开始报数,1..(m-1)置队尾
{
deleteQue(&q,&e);
insertQue(&q,e);
}
deleteQue(&q,&e);
A[ak++]=e; //生成新序列于A中
}
for (k=0;k<n;k++) //输出
{
printf(" %d ",*(A+k));
}
printf("\n如果满意记得给分,哈哈;\n");
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询