实验报告05-链队列的基本操作
实验目的及要求:
了解和掌握链队列的特点;
掌握链队列基本操作的实现;
要求完成链队列的初始化、入队、出队、取队头元素、显示操作的实现。
实验设备环境及要求:
PC 机一台,内存要求128M 以上,VC++6.0集成开发环境。
实验内容与步骤:
1、在VC++6.0环境中新建一个工程和C++文件;
2、实现链队列初始化、入队、出队、取队头元素算法,代码如下:
#include
#include
typedef char QElemType;
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int InitQueue(LinkQueue &Q){
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if(!Q.front) return 0;
Q.front->next = NULL;
return 1;
}
int EnQueue(LinkQueue &Q,QElemType e){
QueuePtr p;
p = (QueuePtr) malloc(sizeof(QNode));
if(!p) return 0;
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return 1;
}
int DeQueue(LinkQueue &Q,QElemType &e){
QueuePtr p;
if(Q.front == Q.rear) return 0;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear == p) Q.rear = Q.front;
free(p);
return 1;
}
int DestroyQueue(LinkQueue &Q){
while(Q.front){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return 1;
}
void DispQueue(LinkQueue Q){
QueuePtr p;
if(Q.front == Q.rear) printf("队列为空!!\n");
for(p = Q.front->next; p; p = p->next)
printf("%c",p->data);
printf("\n");
}
void main(){
LinkQueue Q;
QElemType e;
InitQueue(Q);
EnQueue(Q,'A');
EnQueue(Q,'B');
EnQueue(Q,'C');
EnQueue(Q,'D');
EnQueue(Q,'E');
printf("队列为:");
DispQueue(Q);
DeQueue(Q,e);
printf("队头元素为:");
printf("%c\n",e);
printf("队列为:");
DispQueue(Q);
DestroyQueue(Q);
}
实验指导与数据处理:
实验结果:队列为:ABCDE
队头元素为:A
队列为:BCDE
分析讨论:
本次实验通过对链队列基本操作的实现,加深了对链队列特点的理解,并且熟悉了VC++6.0集成环境,虽然在调试过程中遇到一些问题,但经分析后达到了预期的结果。