1 / 11
文档名称:

数据结构实验报告二(栈、队列与杨辉三角).docx

格式:docx   大小:1,601KB   页数:11
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构实验报告二(栈、队列与杨辉三角).docx

上传人:幸福人生 2022/10/2 文件大小:1.56 MB

下载得到文件列表

数据结构实验报告二(栈、队列与杨辉三角).docx

文档介绍

文档介绍:该【数据结构实验报告二(栈、队列与杨辉三角) 】是由【幸福人生】上传分享,文档一共【11】页,该文档可以免费在线阅读,需要了解更多关于【数据结构实验报告二(栈、队列与杨辉三角) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。数据结构实验报告二(栈、队列与杨辉三角)
《数据结构》
实验报告
项目名称栈、队列与杨辉三角
专业班级软件工程工科试验班
学号3903120128
姓名谢江
实验成绩:
批阅教师:
2012年5月22日
实验1《单链表的建立与约瑟夫问题》
实验学时:实验地点:寝室与实验室实验日期:2012年5月22日

实验2主要是关于栈。队列的建立以及杨辉三角问题的解决(队列运用)

(1)栈
classStack
{
能建立顺序栈,以及链表顺序队列,对于比较复杂的链栈、循环队列等比较不熟悉,杨辉三角问题存在问题此次报告暂时不交,还有就是抛出异常的问题,例如:
TdeQueue()throw(runtime_error);//元素出对,如果没有元素,抛出异常
会提示警告:
C++exceptionspecificationignoredexcepttoindicateafunctionisnot_declspec(nothrow)
于是尽可能用if(…)throwruntime_error,就不报错了

(1)栈

*****************************
//采用数组的方式进行栈的操作
#ifndefSTACK_H
#defineSTACK_H
template<typenameT>
classStack
{
public:
Stack();
boolempty();//判断栈是否为空
Tpeek();//显示栈顶元素
voidpush(Tvalue);//入栈
Tpop();//出栈
intgetSize();//当前栈中元素的数量
private:
T*elements;//数组指针
intsize;//栈中的元素数量
intcapacity;//栈的容量
voidensureCapacity();//确认栈的容量是否大于元素数量
};
template<typenameT>
Stack<T>::Stack()
{
capacity=10;//初始栈的大小
size=0;//初始元素的数量
elements=newT[capacity];//建立指针
}
template<typenameT>
boolStack<T>::empty()
{
if(size==0)
returntrue;
else
returnfalse;
}
template<typenameT>//只显示栈顶元素并不出栈
TStack<T>::peek()
{
returnelements[size-1];
}
template<typenameT>
voidStack<T>::ensureCapacity()
{
if(size>=capacity)//如果满足进行指针的更换
{
T*old=elements;
capacity=size+1;
elements=newT[capacity];
for(inti=0;i<size;i++)elements[i]=old[i];
deleteold;
}
}
template<typenameT>
voidStack<T>::push(Tvalue)
{
ensureCapacity();//入栈前进行栈是否溢出的判断
elements[size++]=value;
}
template<typenameT>
TStack<T>::pop()
{
returnelements[--size];
}
template<typenameT>
intStack<T>::getSize()
{
returnsize;
}
#endif
*************************************

*************************************
#include<iostream>
#include""
usingnamespacestd;
intmain()
{
Stack<int>intS;
cout<<"beforepushsizeofintStackis:"<<()<<endl;//统计入栈前栈的大小
for(inti=0;i<10;i++)
{
intnum;
cout<<"enternum:";
cin>>num;
(num);
}
cout<<"nowsizeofintStackis:"<<()<<endl;//统计入栈后栈的大小
while(!())
{
cout<<()<<"out"<<endl;
}
cout<<"afterpopsizeofintStackis:"<<()<<endl;//出站后栈的大小
system("pause");
return0;
}
##################################################
(2)队列

******************************************
#ifndefLINKEDLIST_H
#defineLINKEDLIST_H
#include<stdexcept>
usingnamespacestd;
template<typenameT>classQueue;//前视定义,否则无法友元
template<typenameT>
classNode
{
public:
Telement;//节点数据域
Node<T>*next;//指向下指针
Node()
{
next=NULL;
}
Node(Telement)
{
this->element=element;
next=NULL;
}
};
template<typenameT>
classLinkedList
{
public:
LinkedList();
TremoveFirst();//移除并返回表头元素
voidaddLast(Telement);//尾端插入新元素
intgetSize();//获取表的大小
private:
Node<T>*head,*tail;//定义头节点、尾节点
intsize;
};
template<typenameT>
LinkedList<T>::LinkedList()//初始化链表NULL
{
head=tail=NULL;
size=0;
}
template<typenameT>
voidLinkedList<T>::addLast(Telement)
{
if(tail==NULL)
{
head=tail=newNode<T>(element);
}
else
{
tail->next=newNode<T>(element);
tail=tail->next;
}
size++;//作添加工作,size++
}
template<typenameT>
TLinkedList<T>::removeFirst()
{
if(size==0)
throwruntime_error("Noelements");//抛出异常情况
else
{
//删除并返回头节点元素,把下一节点作为新的头节点
Node<T>*temp=head;
head=head->next;
if(head==NULL)tail=NULL;
size--;//作删除工作,size--
Telement=temp->element;
deletetemp;
returnelement;
}
}
template<typenameT>
intLinkedList<T>::getSize()//返回size
{
returnsize;
}
#endif
****************************************

***********************************
#ifndefQUEUE_H
#defineQUEUE_H
#include""
#include<stdexcept>
usingnamespacestd;
template<typenameT>
classQueue
{
public:
Queue();
voidenQueue(Telement);//元素入队
TdeQueue();//元素出对,如果没有元素,抛出异常
intgetSize();//获取队列大小
private:
LinkedList<T>list;//定义表
};
template<typenameT>
Queue<T>::Queue(){}//空的构造函数
template<typenameT>
voidQueue<T>::enQueue(Telement)
{
(element);//入队(后插)
}
template<typenameT>
TQueue<T>::deQueue()
{
();//出对(前删)
}
template<typenameT>
intQueue<T>::getSize()
{
();
}
#endif
*******************************************

*******************************************
#include<iostream>
#include<stdexcept>
#include""
usingnamespacestd;
intmain()
{
Queue<int>q;
cout<<"beforeenQueuesizeis:"<<()<<endl;
for(inti=0;i<10;i++)
{
(i);
cout<<i<<"enterqueue"<<endl;
}
cout<<"afterenQueuesizesi:"<<()<<endl;
while(()!=0)
{
cout<<()<<"outqueue"<<endl;