编写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");
}
原文地址:http://www.cnblogs.com/smartlearn/p/16884346.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性