问答 百科手机端

编写C程序,实现链队列的下列功能: 1、设计一个虚拟界面,让用户选择操作(根据提示输入数据) 2、采用模块化编程思想,编写main函数和若干子函数(实现功能) 3、队列的基本功能有:创建空队列、入队、出队、取队头元素等

2023-03-27 11:47

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"); }

热门