编写C程序,实现链队列的下列功能:
1、 设计一个虚拟界面,让用户选择操作(根据提示输入数据)
2、 采用模块化编程思想,编写main函数和若干子函数(实现功能)
3、 队列的基本功能有:创建空队列、入队、出队、取队头元素等。
#include<stdio.h> #include<stdlib.h> #define MaxSize 6 #define false 0 #define true 1 typedef int datatype; typedef struct Qnode { datatype data; //数据域 struct Qnode* next; //指针域 }Qnode; //结点 typedef struct { Qnode* front; //队头指针 Qnode* rear; //队尾指针 int num; }LinkQueue; //链队列 void printStar() //连续输入几十个*,用来设计虚拟界面的边框 { int i; for (i = 0; i < 70; i++) printf("*"); printf("\n"); } void menu() { printStar(); printf("\t\t\t欢迎进入链队列操作界面!\n"); printf("请从键盘输入数字,完成对应的操作(1到5为有效操作,输入其他退出程序)\n"); printf("\t 1.初始化链队列\n"); printf("\t 2.入队\n"); printf("\t 3.出队\n"); printf("\t 4.取队头元素\n"); printf("\t 5.输出该链队列\n"); printStar(); } LinkQueue* InitQueue() //初始化链队列 { LinkQueue* q; Qnode* p; q = (LinkQueue*)malloc(sizeof(LinkQueue));//申请头结点的内存空间 p = (Qnode*)malloc(sizeof(Qnode)); q->front = q->rear = p; //对头和队尾指针指向p结点 q->front->next = NULL; q->num = 0; printf("链队列初始化成功!\n"); return q; } void EnQueue(LinkQueue* Q, datatype x) //入队 { Qnode* p; p = (Qnode*)malloc(sizeof(Qnode)); if (Q->num == MaxSize - 1) { printf("队列已满,无法进行入队操作!\n"); } p->data = x; Q->rear->next = p; p->next = NULL; Q->rear = p; Q->num++; printf("入队完毕\n"); } void DeQueue(LinkQueue* Q) //出队 { Qnode* p; datatype x; if (Q->front == Q->rear) printf("队列为空队列,无法进行出队操作!\n"); else { p = Q->front->next; x = p->data; Q->front->next = p->next; if (Q->rear == p) { Q->rear = Q->front; } Q->num--; } } int GetHead(LinkQueue* Q) //取队头元素 { Qnode* p = Q->front->next; if (Q->front == Q->rear) //空队列 printf("队列为空队列!\n"); else { return p->data; } } void display(LinkQueue* Q) //输出该链队列 { if (Q->front == Q->rear) //空队列 printf("队列为空队列!\n"); else { Qnode* k = Q->front->next; while (k) { printf("%d ", k->data); k = k->next; } printf("NULL"); printf("\n"); } } void main() { int select, x = 0, flag = 1; LinkQueue* p = NULL; menu(); while (flag == 1) { printf("您选择的操作是:"); fflush(stdin); scanf_s("%d", &select); switch (select) { //根据用户的输入,调用前面写的子函数,完成链队列的5个功能 case 1: p = InitQueue(); //初始化 printf("\n"); break; case 2:printf("请输入要入队的数据:"); scanf_s("%d", &x); EnQueue(p, x); //入队 printf("\n"); break; case 3: DeQueue(p); //出队 printf("出队\n", x); break; case 4:x = GetHead(p); //取队头元素 printf("头元素: %d\n", x); break; case 5:display(p); //输出该链队列 printf("\n"); break; default:printf("您选择退出程序,欢迎下次光临!\n"); flag = 0; } } printf("\n"); system("pause"); }标签:Qnode,队列,LinkQueue,入队,printf,front,编写 From: https://www.cnblogs.com/smartlearn/p/16884346.html