当前位置:文档之家› 实验三 栈和队列的操作

实验三 栈和队列的操作

实验三栈和队列的操作
一.实验目的和要求
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,头文件为<iostream.h>
四.附源程序
#include<iostream.h>
#include<stdlib.h>
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"<<endl;
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!"<<endl;
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<<q->data<<' ';//输出该结点的值
q=q->next;//指针往后移
}
cout<<q->data<<endl;//输出最后一个结点的值
}
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);
}。

相关主题