当前位置:文档之家› 南昌航空大学实验四

南昌航空大学实验四

南昌航空大学实验报告课程名称:数据结构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;}void get(Lqueue *q,char x[]){ /*接受短信*/int n;if (q->number==20){LOutQueue(q);q->number--;}LInQueue(q,x);q->number++;}void deleteall(Lqueue *q){ /*删除所有短信*/while (q->front!=q->rear)LOutQueue(q);q->number=0;}void deleteone(Lqueue *q,int n){/*删除第n条短信*/Lqueue *p;Qnodetype *s;int i;p=q;i=1;while (i<n){p->front=p->front->next;i=i+1;}s=p->front->next;p->front->next=p->front->next->next;free(s);q->number--;}void displayall(Lqueue *q){/*显示所有短信*/Lqueue *p;char x[MAXNUM];p=q;while(p->front!=q->rear){p->front=p->front->next;printf("%s\n",p->front->data);} printf("\n");}void displayone(Lqueue *q,int n) {/*显示第n条短信*/Lqueue *p;Qnodetype *s;int i;p=q;i=1;while (i<n){p->front=p->front->next;i=i+1;}s=p->front->next;printf("%s\n",s->data);}void main(){ Lqueue *Lp; int i;Qnodetype *headnode;char command,ch[MAXNUM];initLqueue(&Lp);headnode=Lp->front;while (1){printf("Get information(%d),please enter R\n",Lp->number);printf("Display one information(%d),please enterL\n",Lp->number);printf("Display all information(%d),please enterA\n",Lp->number);printf("Delete one information(%d),please enterD\n",Lp->number);printf("Delete all information(%d),please enterU\n",Lp->number);printf("Quit,please enter Q\n");printf("please input command:");scanf("%c",&command);switch (command){case 'r':case 'R': gets(ch);Lp->front=headnode;get(Lp,ch);break;case 'l':case 'L':printf("enter No.:"),scanf("%d",&i);Lp->front=headnode;displayone(Lp,i);break;case 'a':case 'A':Lp->front=headnode;displayall(Lp);break;case 'd':case 'D':printf("enter No.:"),scanf("%d",&i);Lp->front=headnode;deleteone(Lp,i);break;case 'u':case 'U':Lp->front=headnode;deleteall(Lp);break;case 'q':case 'Q':printf("quit!");}if (command=='q'||command=='Q') break;}}五、实验结果最后程序运行结果如下所示:Get information(0),please enter RDisplay one information(0),please enter LDisplay all information(0),please enter ADelete one information(0),please enter DDelete all information(0),please enter UQuit,please enter Qplease input command: rI like c++↙<回车>Get information(1),please enter RDisplay one information(1),please enter LDisplay all information(1),please enter ADelete one information(1),please enter D Delete all information(1),please enter U Quit,please enter Qplease input command。

相关主题