目录
本帖可以实现的功能
1.实现功能
void pro()
{
printf("0.退出\n");
printf("1.建立一个新队列\n");
printf("2.按照输出方式打印队列信息\n");
printf("3.求队列长度\n");
printf("4.获取对头元素\n");
printf("5.获取队尾元素\n");
printf("6.删除对头元素\n");
printf("7.判断队列是否为空\n");
printf("8.在队尾插入一个数\n");
printf("9.清空一个队列\n");
printf("10.摧毁一个队列\n");
}
2.建队列
void InitQueue(LinkQueue &Q)
{
//建立链队列
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
Q.front = Q.rear;
if (!Q.front)
printf("开辟空间失败\n");
Q.front->next = NULL;
printf("链式队列存储空间开辟完成\n");
// Q.front->next=Q.rear->next;
}
3.进队列
Status EnQueue(LinkQueue &Q, int e)
{
//在队列的尾部插入元素
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
4.打印队列信息
void print(LinkQueue Q)
{
//打印对列信息,按照输出方向
QueuePtr p;
p = Q.front->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
5.队列的判空
void QueueEmpty(LinkQueue Q)
{
//判断是否为空队列
if (Q.front == Q.rear)
{
printf("空\n");
}
else
{
printf("不空\n");
}
}
6.求队列的长度
void QueueLength(LinkQueue Q)
{
//求队列的长度
int length = 0;
QueuePtr p, q;
p = Q.front->next;
while (p != NULL)
{
p = p->next;
length++;
}
printf("长度为%d\n", length);
}
7.求队尾元素
void QueueRear(LinkQueue Q)
{
//求队尾
printf("队尾元素是:%d\n", Q.rear->data);
}
8.删除队列元素同时返回队尾元素的值
Status DeQueue(LinkQueue &Q)
{
int e;
if (Q.front == Q.rear)
{
printf("这个队列为空\n");
}
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
{
Q.rear = Q.front;
}
free(p);
return e;
}
9.求队头元素
void QueueFront(LinkQueue Q)
{
//求对头
printf("对头元素为:%d\n", Q.front->next->data);
}
10.输入队列元素
Status CreatQueue(LinkQueue &Q)
{
//输入队列元素
printf("请输入队列里面的元素\n");
int e;
scanf("%d", &e);
while (e != -1)
{
EnQueue(Q, e);
scanf("%d", &e);
}
}
11.摧毁一个队列
Status DestoryQueue(LinkQueue &Q)
{
QueuePtr p;
while(!p)
{
p=Q.front;
Q.front=Q.front->next;
free(p);
}
printf("摧毁队列完成\n");
}
12.请空队列
Status ClearQueue(LinkQueue &Q)
{
Q.rear=Q.front->next=NULL;
printf("清空操作已经完成\n");
}
13.switch case选择
void swi(LinkQueue Q)
{
int num;
pro();
printf("请输入功能数字:");
scanf("%d", &num);
while (num)
{
switch (num)
{
case 0:
num = 0;
break;
case 1:
printf("建立一个新队列\n");
InitQueue(Q);
printf("\n\n");
CreatQueue(Q);
printf("建立成功\n");
break;
case 2:
if (Q.rear == NULL)
{
printf("在进行操作二时,需要进行操作一\n");
}
else
{
printf("队列信息如下:\n");
print(Q);
}
break;
case 3:
if (Q.rear == NULL)
{
printf("在进行操作三时,需要进行操作一\n");
}
else
{
printf("队列");
QueueLength(Q);
}
break;
case 4:
if (Q.rear == NULL)
{
printf("在进行操作四时,需要进行操作一\n");
}
else
{
printf("获取对头元素\n");
QueueFront(Q);
}
break;
case 5:
if (Q.rear == NULL)
{
printf("在进行操作五时,需要进行操作一\n");
}
else
{
printf("获取队尾元素\n");
QueueRear(Q);
}
break;
case 6:
if (Q.rear == NULL)
{
printf("在进行操作六时,需要进行操作一\n");
}
else
{
printf("删除对头元素,");
int e;
e = DeQueue(Q);
printf("删除的对头元素是:%d\n", e);
}
break;
case 7:
if (Q.rear == NULL)
{
printf("在进行操作七时,需要进行操作一\n");
}
else
{
printf("判断队列是否为空\n");
QueueEmpty(Q);
}
break;
case 8:
if (Q.rear == NULL)
{
printf("在进行操作八时,需要进行操作一\n");
}
else
{
printf("在队尾插入一个数\n");
int n;
printf("请输入一个数字:");
scanf("%d", &n);
printf("\n");
EnQueue(Q, n);
printf("插入成功\n");
}
break;
case 9:
if (Q.rear == NULL)
{
printf("在进行操作九时,需要进行操作一\n");
}
else
{
ClearQueue(Q);
}
break;
case 10:
if (Q.rear == NULL)
{
printf("在进行操作十时,需要进行操作一\n");
}
else
{
DestoryQueue(Q);
Q.rear=NULL;
}
break;
default:
printf("输入错误,请重新输入\n");
}
printf("\n\n");
pro();
printf("请输入功能数字:");
scanf("%d", &num);
}
}
14.全部代码内容
// define区
#define Stack_Init_Size 100
#define Stack_Increment 10
#define OK 1
#define OVERFLOW -2
#define ERROR 0
//预处理
#include <stdio.h>
#include <stdlib.h>
//typedef
typedef int Status;
typedef struct QNode
{
int data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
} LinkQueue;
//函数区声明
void InitQueue(LinkQueue &Q); //建立链队列
Status EnQueue(LinkQueue &Q, int e); //在队列的尾部插入元素
void print(LinkQueue Q); //打印对列信息,按照输出方向
void QueueEmpty(LinkQueue Q); //判断是否为空队列
void QueueLength(LinkQueue Q); //求队列的长度
void QueueRear(LinkQueue Q); //求队尾
Status DeQueue(LinkQueue &Q); //求对头
void QueueFront(LinkQueue Q); //输入队列元素
Status CreatQueue(LinkQueue &Q); //创建队列
Status DestoryQueue(LinkQueue &Q); //摧毁队列
Status ClearQueue(LinkQueue &Q); //请空队列
void pro(); //功能
void swi(LinkQueue Q); //switch
//主函数
int main()
{
LinkQueue Q;
Q.rear = NULL;
swi(Q);
}
void InitQueue(LinkQueue &Q)
{
//建立链队列
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
Q.front = Q.rear;
if (!Q.front)
printf("开辟空间失败\n");
Q.front->next = NULL;
printf("链式队列存储空间开辟完成\n");
// Q.front->next=Q.rear->next;
}
Status EnQueue(LinkQueue &Q, int e)
{
//在队列的尾部插入元素
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
void print(LinkQueue Q)
{
//打印对列信息,按照输出方向
QueuePtr p;
p = Q.front->next;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void QueueEmpty(LinkQueue Q)
{
//判断是否为空队列
if (Q.front == Q.rear)
{
printf("空\n");
}
else
{
printf("不空\n");
}
}
void QueueLength(LinkQueue Q)
{
//求队列的长度
int length = 0;
QueuePtr p, q;
p = Q.front->next;
while (p != NULL)
{
p = p->next;
length++;
}
printf("长度为%d\n", length);
}
void QueueRear(LinkQueue Q)
{
//求队尾
printf("队尾元素是:%d\n", Q.rear->data);
}
Status DeQueue(LinkQueue &Q)
{
int e;
if (Q.front == Q.rear)
{
printf("这个队列为空\n");
}
QueuePtr p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
{
Q.rear = Q.front;
}
free(p);
return e;
}
void QueueFront(LinkQueue Q)
{
//求对头
printf("对头元素为:%d\n", Q.front->next->data);
}
/*
int DeQueue(LinkQueue &Q)
{
//删除对列的对头元素
QNode *p;
p = Q.front->next;
int e = p->data;
Q.front->next = p->next;
free(p);
return e;
}*/
Status CreatQueue(LinkQueue &Q)
{
//输入队列元素
printf("请输入队列里面的元素\n");
int e;
scanf("%d", &e);
while (e != -1)
{
EnQueue(Q, e);
scanf("%d", &e);
}
}
Status DestoryQueue(LinkQueue &Q)
{
QueuePtr p;
while(!p)
{
p=Q.front;
Q.front=Q.front->next;
free(p);
}
printf("摧毁队列完成\n");
}
Status ClearQueue(LinkQueue &Q)
{
Q.rear=Q.front->next=NULL;
printf("清空操作已经完成\n");
}
void pro()
{
printf("0.退出\n");
printf("1.建立一个新队列\n");
printf("2.按照输出方式打印队列信息\n");
printf("3.求队列长度\n");
printf("4.获取对头元素\n");
printf("5.获取队尾元素\n");
printf("6.删除对头元素\n");
printf("7.判断队列是否为空\n");
printf("8.在队尾插入一个数\n");
printf("9.清空一个队列\n");
printf("10.摧毁一个队列\n");
}
void swi(LinkQueue Q)
{
int num;
pro();
printf("请输入功能数字:");
scanf("%d", &num);
while (num)
{
switch (num)
{
case 0:
num = 0;
break;
case 1:
printf("建立一个新队列\n");
InitQueue(Q);
printf("\n\n");
CreatQueue(Q);
printf("建立成功\n");
break;
case 2:
if (Q.rear == NULL)
{
printf("在进行操作二时,需要进行操作一\n");
}
else
{
printf("队列信息如下:\n");
print(Q);
}
break;
case 3:
if (Q.rear == NULL)
{
printf("在进行操作三时,需要进行操作一\n");
}
else
{
printf("队列");
QueueLength(Q);
}
break;
case 4:
if (Q.rear == NULL)
{
printf("在进行操作四时,需要进行操作一\n");
}
else
{
printf("获取对头元素\n");
QueueFront(Q);
}
break;
case 5:
if (Q.rear == NULL)
{
printf("在进行操作五时,需要进行操作一\n");
}
else
{
printf("获取队尾元素\n");
QueueRear(Q);
}
break;
case 6:
if (Q.rear == NULL)
{
printf("在进行操作六时,需要进行操作一\n");
}
else
{
printf("删除对头元素,");
int e;
e = DeQueue(Q);
printf("删除的对头元素是:%d\n", e);
}
break;
case 7:
if (Q.rear == NULL)
{
printf("在进行操作七时,需要进行操作一\n");
}
else
{
printf("判断队列是否为空\n");
QueueEmpty(Q);
}
break;
case 8:
if (Q.rear == NULL)
{
printf("在进行操作八时,需要进行操作一\n");
}
else
{
printf("在队尾插入一个数\n");
int n;
printf("请输入一个数字:");
scanf("%d", &n);
printf("\n");
EnQueue(Q, n);
printf("插入成功\n");
}
break;
case 9:
if (Q.rear == NULL)
{
printf("在进行操作九时,需要进行操作一\n");
}
else
{
ClearQueue(Q);
}
break;
case 10:
if (Q.rear == NULL)
{
printf("在进行操作十时,需要进行操作一\n");
}
else
{
DestoryQueue(Q);
Q.rear=NULL;
}
break;
default:
printf("输入错误,请重新输入\n");
}
printf("\n\n");
pro();
printf("请输入功能数字:");
scanf("%d", &num);
}
}
15.运行图片
在没有建立队列时:
建立队列
打印队列
求长度
获取对头元素
获取队尾元素
删除对头元素
队尾插入一个数字
验证