更新 'ex3_2_2.c'

This commit is contained in:
xtaodada 2022-04-14 21:52:16 -04:00
parent e9084b7b32
commit d900c47409

315
ex3_2_2.c
View File

@ -1,142 +1,173 @@
#include<stdio.h> /*
#include<stdlib.h> Des:
#include<conio.h> */
typedef int DataType; #include<stdio.h>
typedef struct QNode{ #include<stdlib.h>
DataType data; // 元素 #include<conio.h>
struct QNode *next; // 指向下一个结点的指针 typedef int DataType;
}QType; typedef struct QNode{
typedef struct { DataType data; // 元素
QType *front,*rear; // 队头队尾指针 struct QNode *next; // 指向下一个结点的指针
}LinkQueue; }QType;
typedef struct {
void InitQueue(LinkQueue *lq){ QType *front,*rear; // 队头队尾指针
lq=(LinkQueue *)malloc(sizeof(LinkQueue)); }LinkQueue;
lq->rear=lq->front=NULL; /* 初始化队列 */
printf("\n初始化成功\n"); void InitQueue(LinkQueue *lq){
} lq=(LinkQueue *)malloc(sizeof(LinkQueue));
int EnQueue(LinkQueue *lq, DataType e){ lq->rear=lq->front=NULL;
QType *s; printf("\n初始化成功\n");
s=(QType *)malloc(sizeof(QType)); }
s->data = e; /*
s->next = NULL; e
if(lq->front==NULL){
lq->rear = lq->front = s; 1
} else { */
lq->rear->next = s; int EnQueue(LinkQueue *lq, DataType e){
lq->rear = s; QType *s;
} s=(QType *)malloc(sizeof(QType));
return 1; s->data = e;
} s->next = NULL;
int DeQueue(LinkQueue *lq, DataType *e){ if(lq->front==NULL){
QType *p; lq->rear = lq->front = s;
if(lq->front==NULL){ } else {
return 0; lq->rear->next = s;
} lq->rear = s;
p = lq->front; }
*e = p->data; return 1;
if(lq->rear == lq->front){ }
lq->rear = lq->front = NULL; /*
} else { e
lq->front = lq->front->next;
} 1 0
free(p); */
return 1; int DeQueue(LinkQueue *lq, DataType *e){
} QType *p;
int GetHead(LinkQueue *lq, DataType *e){ if(lq->front==NULL){
if(lq->front==NULL){ return 0;
return 0; }
} p = lq->front;
*e = lq->front->data; *e = p->data;
return 1; if(lq->rear == lq->front){
} lq->rear = lq->front = NULL;
int QueueEmpty(LinkQueue *lq){ } else {
if(lq->front==NULL) return 1; lq->front = lq->front->next;
return 0; }
} free(p);
void OutputQueue(LinkQueue *lq){ return 1;
QType *p; }
if(lq->front==NULL){ /*
return; e
}
p = lq->front; 1 0
while(p!=NULL){ */
printf("%d ", p->data); int GetHead(LinkQueue *lq, DataType *e){
p = p->next; if(lq->front==NULL){
} return 0;
printf("\n"); }
} *e = lq->front->data;
int DeleteOne(LinkQueue *lq){ return 1;
DataType e; }
if(QueueEmpty(lq)){ /*
return 0;
}
DeQueue(lq,&e); 0 1
return 1; */
} int QueueEmpty(LinkQueue *lq){
int main(){ if(lq->front==NULL) return 1;
LinkQueue Q1; return 0;
int n,choice; }
DataType e; /*
InitQueue(&Q1); // 初始化
*/
for(;;){ void OutputQueue(LinkQueue *lq){
printf("\t\t1.入队\n"); QType *p;
printf("\t\t2.出队\n"); if(lq->front==NULL){
printf("\t\t3.输出所有元素\n"); return;
printf("\t\t4.读取队列的第一个元素\n"); }
printf("\t\t5.删除一个元素\n"); p = lq->front;
printf("\t\t0.退出\n"); while(p!=NULL){
printf("%d ", p->data);
printf("请选择:"); p = p->next;
scanf("%d",&choice); }
if(choice==0) break; printf("\n");
switch (choice) { }
case 1: /*
printf("请输入需要输入的元素个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){ 1 0
printf("请输入第 %d 个元素:",i+1); */
scanf("%d",&e); int DeleteOne(LinkQueue *lq){
EnQueue(&Q1,e); DataType e;
} if(QueueEmpty(lq)){
OutputQueue(&Q1); return 0;
break; }
case 2: DeQueue(lq,&e);
n=DeQueue(&Q1,&e); return 1;
if(n>0){ }
printf("出队元素为 %d\n",e); int main(){
} else { LinkQueue Q1;
printf("队为空\n"); int n,choice;
} DataType e;
break; InitQueue(&Q1);
case 3:
OutputQueue(&Q1); for(;;){
break; printf("\t\t1.入队\n");
case 4: printf("\t\t2.出队\n");
n=GetHead(&Q1,&e); printf("\t\t3.输出所有元素\n");
if(n>0){ printf("\t\t4.读取队列的第一个元素\n");
printf("队列的第一个元素为 %d\n",e); printf("\t\t5.删除一个元素\n");
} else { printf("\t\t0.退出\n");
printf("队为空\n");
} printf("请选择:");
break; scanf("%d",&choice);
case 5: if(choice==0) break;
n=DeleteOne(&Q1); switch (choice) {
if(n==0){ case 1:
printf("删除失败,队为空。\n"); printf("请输入需要输入的元素个数:");
} else { scanf("%d",&n);
printf("删除成功\n"); for(int i=0;i<n;i++){
} printf("请输入第 %d 个元素:",i+1);
OutputQueue(&Q1); scanf("%d",&e);
break; EnQueue(&Q1,e);
default: }
break; OutputQueue(&Q1);
} break;
printf("请按任意键继续..."); case 2:
getch(); n=DeQueue(&Q1,&e);
system("cls"); if(n>0){
} printf("出队元素为 %d\n",e);
printf("感谢使用,再见\n"); } else {
return 0; 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;
default:
break;
}
printf("请按任意键继续...");
getch();
system("cls");
}
printf("感谢使用,再见\n");
return 0;
}