实验三 栈和队列的操作

  • 格式:doc
  • 大小:33.00 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三栈和队列的操作

一.实验目的和要求

1、学会通过对问题的分析,设计一种合理的数据结构,并进行定义及操作的实现。

2、掌握利用栈和队列的各种操作来进行具体的实际应用。

3、加强综合程序的分析、设计能力。

二.实验内容

课后习题4-7

三.实验步骤

1、定义一个函数void QInsert(LNode*&Rear,const ElemType& item),新建一个结点,如果尾指针为空,则指向新建的结点;否则新结点指向尾指针当前指向的结点,然后尾指针指向新结点,最后新结点成为尾指针。

2、定义一个函数ElemType QDelete(LNode*&Rear),若删除的是最后一个结点,则删除后尾指针为NULL,尾指针指向被删除结点的后继。

3、定义函数void Print(LNode*&Rear)输出队列,从第一个结点开始依次输出,第一个结点就是尾指针指向的结点。

注意:定义文件后缀为.cpp,头文件为

四.附源程序

#include

#include

typedef int ElemType;

struct LNode

{

LNode *next;

ElemType data;

};

void QInsert(LNode*&Rear,const ElemType& item)

//使新元素item的值插入到循环链队中

{

LNode*newptr=new LNode;

//得到一个由newptr指针所指向的新结点

if(newptr==NULL){

cerr<<"Memory allocation failare"<

exit(1);

}

newptr->data=item;//把item的值赋给新结点的值域

if(Rear==NULL)

Rear=newptr->next=newptr;

//若链队为空,则新结点即是队首结点又是队尾结点

else{

newptr->next=Rear->next;

//使新结点的指针域指向队首结点

Rear->next=newptr;

//使队尾结点的指针域指向新结点

Rear=newptr;

//使新结点成为新的队尾结点

}

}

ElemType QDelete(LNode*&Rear)

//从循环链队中删除队首元素

{

if(Rear==NULL){

cerr<<"Linked queue is empty!"<

exit(1);

}

LNode* p=Rear->next; //使p指向队首结点

if(p==Rear)

Rear=NULL;

//若链队中只有一个结点,则删除后队尾指针为空

else

Rear->next=p->next;

//使队尾结点的指针域指向队首结点的后继结点ElemType temp=p->data;//暂存队首元素

delete p;//回收原队首结点

return temp;//返回被删除的队首元素

}

void Print(LNode*&Rear)

{

LNode* q=Rear->next;//从第一个结点开始

while(q!=Rear)//只要不是最后一个结点

{

cout<data<<' ';//输出该结点的值

q=q->next;//指针往后移

}

cout<data<

}

void main()

{

LNode* L1=NULL;

QInsert(L1,3);

QInsert(L1,5);

QInsert(L1,9);

QInsert(L1,1);

QInsert(L1,6);

QInsert(L1,2);

Print(L1);

QInsert(L1,12);

QDelete(L1);

QDelete(L1);

QDelete(L1);

QInsert(L1,19);

Print(L1);

}