一、实验目的
1. 掌握队列的链式存储结构及其编程。
二、实验原理或意义
通过上机实验,加深对队列的链式存储结构知识的掌握。
三、实验重点
1. 入队与出队的操作。
四、实验难点
1. 队列的链式存储结构。
五、实验方法(或技术)
上机实验时一边调试程序一边将实验报告上关于程序调试和运行结果的信息填写到实验报告上,实验完成时上交实验报告。
六、实验内容
1.链式队列的操作编程
(1)完成环境设置及链队列的结构体定义。
(2)编写初始化函数。
(3)编写入队函数、出队函数。
(4)编写主函数对上面各个函数实现调用,记录并分析程序的运行结果。
七、实验报告要求内容
1.实验目的
(1)掌握队列的链式存储结构及其编程。
2.实验要求
1.链式队列的操作编程
(1)完成环境设置及链队列的结构体定义。
(2)编写初始化函数。
(3)编写入队函数、出队函数。
(4)编写主函数对上面各个函数实现调用,记录并分析程序的运行结果。
3.实验代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
int data;
struct Node* next;
}LinkNode;
typedef struct Queue {
LinkNode* rear;
LinkNode* front;
int count; //用于记录队列的元素个数
}LinkQueue;
//带头结点初始化
void initLinkQueue(LinkQueue& Q) {
Q.rear = Q.front = (LinkNode*)malloc(sizeof(LinkNode));
Q.front->next = NULL;
Q.count = 0;
}
bool EnLinkQueue(LinkQueue& Q, int e) {
LinkNode* p = (LinkNode*)malloc(sizeof(LinkNode));
if (!p) { //如果 p 为空开辟结点失败
return false;
}
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p; //调整 rear 指针位置
Q.count++;
return true;
}
bool DelinkQueue(LinkQueue& Q, int& x) {
if (Q.rear == Q.front) {
return false;
}
LinkNode* p = Q.front->next;
x = p->data;
Q.front->next = p->next;
if (Q.rear == p) {
!p->next;
Q.rear = Q.front;
}
free(p);
Q.count--;
p = NULL;
return true;
}
bool isEmpty(LinkQueue& Q) {
if (Q.rear == Q.front) {
printf("队列为空");
return true;
}
return false;
}
//打印元素
void printLinkQueueList(LinkQueue& Q) {
for (int i = 0; i < Q.count; i++) {
Q.front = Q.front->next;
printf(" %d \n", Q.front->data);
}
}
int getSize(LinkQueue& Q) {
return Q.count;
}
void menu() {
printf("==========请输入你的操作===========\n");
printf("==========1.初始化队列\n");
printf("==========2.入队\n");
printf("==========3.出队\n");
printf("==========4.获取队列大小\n");
printf("==========5.查看队列元素\n");
printf("==========6.退出\n");
printf("\n");
}
int main() {
LinkQueue Q;
int enEle = 0;
int deEle = 0;
int Qsize = 0;
int ope = 0;
bool loop = true;
while (loop) {
menu();
printf("请输入你的操作:");
scanf("%d", &ope);
switch (ope)
{
case 1:
initLinkQueue(Q);
printf("初始化队列成功!\n");
break;
case 2:
printf("输入入队元素:");
scanf("%d", &enEle);
EnLinkQueue(Q, enEle);
printf("入队成功!\n");
break;
case 3:
printf("输入出队元素:");
scanf("%d", &deEle);
DelinkQueue(Q, deEle);
printf("出队元素为:%d\n", deEle);
break;
case 4:
Qsize = getSize(Q);
printf("%d\n", Qsize);
break;
case 5:
printf("队列的元素为:\n");
printLinkQueueList(Q);
break;
case 6:
loop = false;
printf("退出成功!");
break;
default:
printf("输入不合理,请重新输入!");
break;
}
}
}
4.实验结果截图