南昌航空大学实验四
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南昌航空大学实验报告
课程名称:数据结构A 实验名称:实验四队列的应用
班级: XXX 学生姓名: XXX 学号: XXXXX 指导教师评定: XXX 签名: XXX
一、实验目的
本实验是队列的一种典型的应用,队列是一种“先到先服务”的特殊的线性
表,本实验要求模拟手机短信功能,使用链式存储结构的队列,进行动态地增加
和删除结点信息。
通过本实验的学习,可以理解队列的基本操作的实现。
二、实验内容
设计程序要求,模拟手机的某些短信息功能。
功能要求:
(1)接受短信息,若超过存储容量(如最多可存储20条),则自动将最早接受
的信息删除。
(2)显示其中任意一条短信息。
(3)逐条显示短信息。
(4)删除其中的任意一条短信息。
(5)清除。
三、程序分析
采用结构体指针定义存储短信结点:
typedef struct Qnode
{char data[MAXNUM];/*字符数组存储短信*/
struct Qnode *next;
}Qnodetype; /*定义队列的结点*/
定义队列:
typedef struct
{ Qnodetype *front;/*头指针*/
Qnodetype *rear; /*尾指针*/
int number;/*短信数量*/
}Lqueue;
(1)int initLqueue(Lqueue **q) 初始化短信队列。
(2)int LInQueue(Lqueue *q,char x[]) 入队列,将字符串x加入到队列尾部。
(3)char * LOutQueue(Lqueue *q) 出队列,删除队头元素,返回其中的字符串。
(4)void get(Lqueue *q,char x[]) 接收短数,若短信数量超过20条,则删除队头短信。
(5)void deleteall(Lqueue *q) 清除所有短信。
(6)void deleteone(Lqueue *q,int n) 删除第n条短信。
(7)void displayall(Lqueue *q) 显示所有短信。
(8)void displayone(Lqueue *q,int n) 显示第n条短信。
在main()函数中,采用菜单方式,菜单中同时显示出已有的短信数量,由用户选择输入命令,实现程序要求功能,命令说明:
R(r):接收短信
L(l):显示任意一条短信
A(a):显示所有短信
D(d):删除任意一条短信
U(u):删除所有短信
Q(q):退出
四、程序源代码
# define MAXNUM 70
# define FALSE 0
# define TRUE 1
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct Qnode
{char data[MAXNUM];
struct Qnode *next;
}Qnodetype; /*定义队列的结点*/
typedef struct
{ Qnodetype *front;/*头指针*/
Qnodetype *rear; /*尾指针*/
int number;/*短信数量*/
}Lqueue;
int initLqueue(Lqueue **q)
{/*创建一个空链队列q*/
if (((*q)->front=(Qnodetype*)malloc(sizeof(Qnodetype)))==NULL) return FALSE;
(*q)->rear=(*q)->front;strcpy((*q)->front->data,"head");
(*q)->front->next=NULL; (*q)->number=0;
return TRUE;}
int LInQueue(Lqueue *q,char x[])
{/*将元素x插入到链队列q中,作为q的新队尾*/
Qnodetype *p;
if ((p=(Qnodetype*)malloc(sizeof(Qnodetype)))==NULL) return FALSE;
strcpy(p->data,x);
p->next=NULL; /*置新结点的指针为空*/
q->rear->next=p; /*将链队列中最后一个结点的指针指向新结点*/
q->rear=p; /*将队尾指向新结点*/
return TRUE;
}
char * LOutQueue(Lqueue *q)
{/*若链队列q不为空,则删除队头元素,返回其元素值*/
char x[MAXNUM];
Qnodetype *p;
if(q->front->next==NULL) return NULL; /*空队列*/
p=q->front->next; /*取队头*/
q->front->next=p->next; /*删除队头结点*/
if (p->next==NULL) q->rear=q->front ;
strcpy(x,p->data);
free(p);
return x;
}