更新 'ex3_2_1.c'

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

378
ex3_2_1.c
View File

@ -1,167 +1,211 @@
#include<stdio.h> /*
#include<stdlib.h> Des:
#include<conio.h> */
#define MAX 1000 #include<stdio.h>
typedef int DataType; #include<stdlib.h>
typedef struct { #include<conio.h>
DataType data[MAX]; // 元素 #define MAX 1000
int front,rear; // 队头队尾指针 typedef int DataType;
}SqQueue; typedef struct {
DataType data[MAX]; // 元素
void InitQueue(SqQueue *sq){ int front,rear; // 队头队尾指针
sq->rear = sq->front = 0; }SqQueue;
printf("\n初始化成功\n"); /* 初始化队列 */
} void InitQueue(SqQueue *sq){
int EnQueue(SqQueue *sq, DataType e){ sq->rear = sq->front = 0;
if((sq->rear+1) % MAX == sq->front){ printf("\n初始化成功\n");
return 0; }
} /*
sq->rear = (sq->rear + 1) % MAX; e
sq->data[sq->rear] = e;
return 1; 1 0
} */
int DeQueue(SqQueue *sq, DataType *e){ int EnQueue(SqQueue *sq, DataType e){
if(sq->rear == sq->front){ if((sq->rear+1) % MAX == sq->front){
return 0; return 0;
} }
sq->front = (sq->front+1) % MAX; // 队头循环进 1 sq->rear = (sq->rear + 1) % MAX;
*e = sq->data[sq->front]; sq->data[sq->rear] = e;
return 1; return 1;
} }
int GetHead(SqQueue *sq, DataType *e){ /*
if(sq->rear == sq->front){ e
return 0;
} 1 0
*e = sq->data[(sq->front + 1) % MAX]; */
return 1; int DeQueue(SqQueue *sq, DataType *e){
} if(sq->rear == sq->front){
int QueueEmpty(SqQueue sq){ return 0;
if(sq.rear == sq.front){ }
return 1; sq->front = (sq->front+1) % MAX;
} *e = sq->data[sq->front];
return 0; return 1;
} }
int QueueFull(SqQueue sq){ /*
if((sq.rear+1) % MAX == sq.front){ e
return 1;
} 1 0
return 0; */
} int GetHead(SqQueue *sq, DataType *e){
void OutputQueue(SqQueue sq){ if(sq->rear == sq->front){
DataType e; return 0;
if(sq.rear == sq.front){ }
return; *e = sq->data[(sq->front + 1) % MAX];
} return 1;
while(sq.rear != sq.front){ }
DeQueue(&sq,&e); /*
printf("%d ", e);
}
printf("\n"); 0 1
} */
int DeleteOne(SqQueue *sq){ int QueueEmpty(SqQueue sq){
DataType e; if(sq.rear == sq.front){
if(sq->rear == sq->front){ return 1;
return 0; }
} return 0;
DeQueue(sq,&e); }
return 1; /*
}
void baoshu(SqQueue *sq, int n, int e){
SqQueue Q2; 0 1
InitQueue(&Q2); */
DataType temp; int QueueFull(SqQueue sq){
int i=0; if((sq.rear+1) % MAX == sq.front){
for(int i=1;i<=n;i++){ return 1;
EnQueue(sq, i); // 全部入队 }
} return 0;
while(!QueueEmpty(*sq)){ }
i++; /*
DeQueue(sq,&temp);
if(i==e){ */
EnQueue(&Q2,temp); // 出队顺序 void OutputQueue(SqQueue sq){
i=0; DataType e;
} else { if(sq.rear == sq.front){
EnQueue(sq,temp); // 重新入队 return;
} }
} while(sq.rear != sq.front){
printf("出队顺序如下:\n"); DeQueue(&sq,&e);
OutputQueue(Q2); printf("%d ", e);
} }
int main(){ printf("\n");
SqQueue Q1; }
int n,choice; /*
DataType e;
InitQueue(&Q1); // 初始化
1 0
for(;;){ */
printf("\t\t1.入队\n"); int DeleteOne(SqQueue *sq){
printf("\t\t2.出队\n"); DataType e;
printf("\t\t3.输出所有元素\n"); if(sq->rear == sq->front){
printf("\t\t4.读取队列的第一个元素\n"); return 0;
printf("\t\t5.删除一个元素\n"); }
printf("\t\t6.应用题:重复数数\n"); DeQueue(sq,&e);
printf("\t\t0.退出\n"); return 1;
}
printf("请选择:"); /*
scanf("%d",&choice);
if(choice==0) break;
switch (choice) { sqsqQ2
case 1: sq数数Q2则为出列顺序
printf("请输入需要输入的元素个数:");
scanf("%d",&n); n e
for(int i=0;i<n;i++){ */
printf("请输入第 %d 个元素:",i+1); void chulie(SqQueue *sq, int n, int e){
scanf("%d",&e); SqQueue Q2;
EnQueue(&Q1,e); InitQueue(&Q2);
} DataType temp;
OutputQueue(Q1); int i=0;
break; for(int i=1;i<=n;i++){
case 2: EnQueue(sq, i);
n=DeQueue(&Q1,&e); }
if(n>0){ while(!QueueEmpty(*sq)){
printf("出队元素为 %d\n",e); i++;
} else { DeQueue(sq,&temp);
printf("队为空\n"); if(i==e){
} EnQueue(&Q2,temp);
break; i=0;
case 3: } else {
OutputQueue(Q1); EnQueue(sq,temp);
break; }
case 4: }
n=GetHead(&Q1,&e); printf("出列顺序如下:\n");
if(n>0){ OutputQueue(Q2);
printf("队列的第一个元素为 %d\n",e); }
} else { int main(){
printf("队为空\n"); SqQueue Q1;
} int n,choice;
break; DataType e;
case 5: InitQueue(&Q1);
n=DeleteOne(&Q1);
if(n==0){ for(;;){
printf("删除失败,队为空。\n"); printf("\t\t1.入队\n");
} else { printf("\t\t2.出队\n");
printf("删除成功\n"); printf("\t\t3.输出所有元素\n");
} printf("\t\t4.读取队列的第一个元素\n");
OutputQueue(Q1); printf("\t\t5.删除一个元素\n");
break; printf("\t\t6.应用题:出列问题\n");
case 6: printf("\t\t0.退出\n");
InitQueue(&Q1); // 重新初始化
printf("请输入人数:"); printf("请选择:");
scanf("%d",&n); scanf("%d",&choice);
if(n>MAX-1){ if(choice==0) break;
printf("人数过多,请重试"); switch (choice) {
break; case 1:
} printf("请输入需要输入的元素个数:");
printf("请输入指定的报数 m"); scanf("%d",&n);
scanf("%d",&e); for(int i=0;i<n;i++){
baoshu(&Q1,n,e); printf("请输入第 %d 个元素:",i+1);
default: scanf("%d",&e);
break; EnQueue(&Q1,e);
} }
printf("请按任意键继续..."); OutputQueue(Q1);
getch(); break;
system("cls"); case 2:
} n=DeQueue(&Q1,&e);
printf("感谢使用,再见\n"); if(n>0){
return 0; printf("出队元素为 %d\n",e);
} } else {
printf("队为空\n");
}
break;
case 3:
OutputQueue(Q1);
break;
case 4:
n=GetHead(&Q1,&e);
if(n>0){
printf("队列的第一个元素为 %d\n",e);
} else {
printf("队为空\n");
}
break;
case 5:
n=DeleteOne(&Q1);
if(n==0){
printf("删除失败,队为空。\n");
} else {
printf("删除成功\n");
}
OutputQueue(Q1);
break;
case 6:
InitQueue(&Q1);
printf("请输入人数:");
scanf("%d",&n);
while(n>MAX-1){
printf("人数过多,请重新输入\n请输入人数:");
scanf("%d",&n);
}
printf("请输入指定的出列数: m");
scanf("%d",&e);
chulie(&Q1,n,e);
default:
break;
}
printf("请按任意键继续...");
getch();
system("cls");
}
printf("感谢使用,再见\n");
return 0;
}