南昌航空大学实验四

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档