更新 'ex3_2_1.c'

This commit is contained in:
xtaodada 2022-04-14 21:51:45 -04:00
parent 0bbb63637d
commit e9084b7b32

View File

@ -1,3 +1,6 @@
/*
Des:
*/
#include<stdio.h> #include<stdio.h>
#include<stdlib.h> #include<stdlib.h>
#include<conio.h> #include<conio.h>
@ -7,11 +10,16 @@ typedef struct {
DataType data[MAX]; // 元素 DataType data[MAX]; // 元素
int front,rear; // 队头队尾指针 int front,rear; // 队头队尾指针
}SqQueue; }SqQueue;
/* 初始化队列 */
void InitQueue(SqQueue *sq){ void InitQueue(SqQueue *sq){
sq->rear = sq->front = 0; sq->rear = sq->front = 0;
printf("\n初始化成功\n"); printf("\n初始化成功\n");
} }
/*
e
1 0
*/
int EnQueue(SqQueue *sq, DataType e){ int EnQueue(SqQueue *sq, DataType e){
if((sq->rear+1) % MAX == sq->front){ if((sq->rear+1) % MAX == sq->front){
return 0; return 0;
@ -20,14 +28,24 @@ int EnQueue(SqQueue *sq, DataType e){
sq->data[sq->rear] = e; sq->data[sq->rear] = e;
return 1; return 1;
} }
/*
e
1 0
*/
int DeQueue(SqQueue *sq, DataType *e){ int DeQueue(SqQueue *sq, DataType *e){
if(sq->rear == sq->front){ if(sq->rear == sq->front){
return 0; return 0;
} }
sq->front = (sq->front+1) % MAX; // 队头循环进 1 sq->front = (sq->front+1) % MAX;
*e = sq->data[sq->front]; *e = sq->data[sq->front];
return 1; return 1;
} }
/*
e
1 0
*/
int GetHead(SqQueue *sq, DataType *e){ int GetHead(SqQueue *sq, DataType *e){
if(sq->rear == sq->front){ if(sq->rear == sq->front){
return 0; return 0;
@ -35,18 +53,31 @@ int GetHead(SqQueue *sq, DataType *e){
*e = sq->data[(sq->front + 1) % MAX]; *e = sq->data[(sq->front + 1) % MAX];
return 1; return 1;
} }
/*
0 1
*/
int QueueEmpty(SqQueue sq){ int QueueEmpty(SqQueue sq){
if(sq.rear == sq.front){ if(sq.rear == sq.front){
return 1; return 1;
} }
return 0; return 0;
} }
/*
0 1
*/
int QueueFull(SqQueue sq){ int QueueFull(SqQueue sq){
if((sq.rear+1) % MAX == sq.front){ if((sq.rear+1) % MAX == sq.front){
return 1; return 1;
} }
return 0; return 0;
} }
/*
*/
void OutputQueue(SqQueue sq){ void OutputQueue(SqQueue sq){
DataType e; DataType e;
if(sq.rear == sq.front){ if(sq.rear == sq.front){
@ -58,6 +89,11 @@ void OutputQueue(SqQueue sq){
} }
printf("\n"); printf("\n");
} }
/*
1 0
*/
int DeleteOne(SqQueue *sq){ int DeleteOne(SqQueue *sq){
DataType e; DataType e;
if(sq->rear == sq->front){ if(sq->rear == sq->front){
@ -66,32 +102,40 @@ int DeleteOne(SqQueue *sq){
DeQueue(sq,&e); DeQueue(sq,&e);
return 1; return 1;
} }
void baoshu(SqQueue *sq, int n, int e){ /*
sqsqQ2
sq数数Q2则为出列顺序
n e
*/
void chulie(SqQueue *sq, int n, int e){
SqQueue Q2; SqQueue Q2;
InitQueue(&Q2); InitQueue(&Q2);
DataType temp; DataType temp;
int i=0; int i=0;
for(int i=1;i<=n;i++){ for(int i=1;i<=n;i++){
EnQueue(sq, i); // 全部入队 EnQueue(sq, i);
} }
while(!QueueEmpty(*sq)){ while(!QueueEmpty(*sq)){
i++; i++;
DeQueue(sq,&temp); DeQueue(sq,&temp);
if(i==e){ if(i==e){
EnQueue(&Q2,temp); // 出队顺序 EnQueue(&Q2,temp);
i=0; i=0;
} else { } else {
EnQueue(sq,temp); // 重新入队 EnQueue(sq,temp);
} }
} }
printf("顺序如下:\n"); printf("顺序如下:\n");
OutputQueue(Q2); OutputQueue(Q2);
} }
int main(){ int main(){
SqQueue Q1; SqQueue Q1;
int n,choice; int n,choice;
DataType e; DataType e;
InitQueue(&Q1); // 初始化 InitQueue(&Q1);
for(;;){ for(;;){
printf("\t\t1.入队\n"); printf("\t\t1.入队\n");
@ -99,7 +143,7 @@ int main(){
printf("\t\t3.输出所有元素\n"); printf("\t\t3.输出所有元素\n");
printf("\t\t4.读取队列的第一个元素\n"); printf("\t\t4.读取队列的第一个元素\n");
printf("\t\t5.删除一个元素\n"); printf("\t\t5.删除一个元素\n");
printf("\t\t6.应用题:重复数数\n"); printf("\t\t6.应用题:出列问题\n");
printf("\t\t0.退出\n"); printf("\t\t0.退出\n");
printf("请选择:"); printf("请选择:");
@ -145,16 +189,16 @@ int main(){
OutputQueue(Q1); OutputQueue(Q1);
break; break;
case 6: case 6:
InitQueue(&Q1); // 重新初始化 InitQueue(&Q1);
printf("请输入人数:"); printf("请输入人数:");
scanf("%d",&n); scanf("%d",&n);
if(n>MAX-1){ while(n>MAX-1){
printf("人数过多,请重"); printf("人数过多,请重新输入\n请输入人数:");
break; scanf("%d",&n);
} }
printf("请输入指定的报数 m"); printf("请输入指定的出列数: m");
scanf("%d",&e); scanf("%d",&e);
baoshu(&Q1,n,e); chulie(&Q1,n,e);
default: default:
break; break;
} }