实验Word格式文档下载.docx
- 文档编号:18186302
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:50
- 大小:30.41KB
实验Word格式文档下载.docx
《实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验Word格式文档下载.docx(50页珍藏版)》请在冰豆网上搜索。
#include<
iostream.h>
stdio.h>
#include"
link1.h"
//构造函数//函数功能:
将链头指针初始化为带表头结点的空链
//函数参数:
无//参数返回值:
无
Link:
:
Link(void)
{
head=newLinkNode;
head->
next=NULL;
}
//析构函数//函数功能:
将链表所有结点的空间释放(包括表头结点)//函数参数:
//参数返回值:
~Link(void)
structLinkNode*p;
while(head!
=NULL)
{
p=head;
head=head->
next;
deletep;
}
//头插入建立链表函数//函数功能:
用头插入建立链表方法生成一个具有n个结点的链表
n表示结点个数//参数返回值:
voidLink:
HeadCreate(intn)
structLinkNode*p,*h=NULL;
for(inti=0;
i<
n;
i++)
p=newLinkNode;
cout<
<
"
请输入元素值:
;
cin>
>
p->
data;
p->
next=h;
h=p;
};
//尾插入建立链表函数//函数功能:
用尾插入建立链表方法生成一个具有n个结点的链表
TailCreate(intn)
structLinkNode*r,*p;
r=head;
r->
next=p;
r=p;
//插入函数
//函数功能:
将一个新值插入到某个位置的结点之后上,如果超过总结点个数,则做尾插入
i表示插入位置//x表示待插入的元素值
1:
表示插入成功0:
表示插入失败
intLink:
Insert(inti,DataTypex)
structLinkNode*t,*p,*q;
if(i<
=0)
\n输入的位置错误\n"
return0;
}
intj=1;
q=head;
p=head->
//q从表头结点开始走,p则从链表的第一结点开始
while(j<
i&
&
p!
=NULL)
q=p;
p=p->
j++;
t=newLinkNode;
t->
data=x;
q->
next=t;
return1;
//删除函数//函数功能:
将链表中某个位置上的结点删除
i表示删除位置//参数返回值:
表示删除成功
//0:
表示删除失败
Delete(inti)
structLinkNode*q,*p;
intj=1;
p=head;
q=head->
if(i<
=0){
\n输入的位置错误\n"
q!
p=q;
q=q->
if(q==NULL)
{cout<
输入的位置超出范围\n"
return0;
next=q->
deleteq;
//按元素值进行查找的函数//函数功能:
按输入的元素值查找其对应的结点
x:
表示输入的元素值//参数返回值:
表示查找成功0:
表示查找失败
Locate(DataTypex)
structLinkNode*p;
cout<
\n请输入需要查找的元素值:
\n"
cin>
x;
while((p->
data!
=x)&
(p!
=NULL))
{p=p->
if(p==NULL)return0;
elsereturn1;
//输出表长的函数//函数功能:
输出表长(即表中元素个数)
无//参数返回值:
sum表示表长
ListSize(void)
intsum=0;
while(p!
sum++;
returnsum;
//逆置链表元素的函数//函数功能:
逆置链表元素
Reserse(void)
{
LinkNode*p=head->
//不包括表头结点
structLinkNode*p1,*h=NULL;
p1=p->
while(p1!
p->
h=p;
p=p1;
p1=p->
}
head=newLinkNode;
//创造一个头结点
//输出链表中元素序列的函数
//函数功能:
从头到尾的将链表中的所有结点一个一个输出来(不包括表头结点)
Print(void)
structLinkNode*p=head->
\n链表中的元素序列是:
while(p!
data<
"
链表.cpp
带表头结点单向链表类应用主程序,包括单向链表的初始化,插入,删除,查找,输出表长及链表的元素的逆置操作的实现.
//主函数
voidmain()
Linklink2;
intfinished=0;
intchoice,n,pos;
DataTypex;
while(!
finished)
cout<
*********菜单*********\n"
1:
链表初始化\n"
2:
头插入建链\n"
3:
尾插入建链\n"
4:
插入\n"
5:
删除\n"
6:
查找\n"
7:
输出链表中元素的个数(即表长)\n"
8:
链表元素的逆置\n"
9:
退出\n"
请选择你要执行的选项(1-9):
cin>
choice;
switch(choice)
{
case1:
case2:
\n请输入要建立的链表的元素的个数:
//调用头插入建立链表
cin>
link2.HeadCreate(n);
link2.Print();
break;
case3:
//调用尾插入建立链表
link2.TailCreate(n);
case4:
\n插入前的元素序列是:
link2.Print();
\n请输入要插入的位置:
pos;
cout<
\n请输入要插入的元素值:
if(link2.Insert(pos,x)==1)//调用链表插入函数
link2.Print();
case5:
\n删除前的元素序列是:
\n请输入要删除的位置:
if(link2.Delete(pos)==1)//调用链表删除函数
case6:
link2.Locate(x);
//调用按元素值进行查找的函数
case7:
link2.ListSize();
//调用输出表长的函数
case8:
link2.Reserse();
//调用链表逆置函数
break;
case9:
finished=1;
//结束程序
}//switch
}//while
}//main
实验二:
栈
//程序名称:
math.cpp
使用栈来实现:
输入一个十进制数n和对应的转换进制d,在屏幕上输出转换结果。
#include<
classstack{
int*vec;
intms;
inttop;
stack(intsize)
vec=newint[size];
ms=size;
top=-1;
~stack(){delete[]vec;
}//析构函数
voidpush(intx);
//把元素x压入栈
intpop();
//使栈顶元素出栈
intgettop();
//取出栈顶元素
voidclear()
{top=-1;
intisempty()//判断栈是否为空
if(top=-1)return1;
elsereturn0;
voidstack:
push(intx)
if(top==ms-1)cout<
overflow"
else{
top++;
vec[top]=x;
intstack:
pop()
inttemp;
if(top==-1)cout<
underflow"
temp=vec[top];
top--;
returntemp;
intmain()
stacks1=stack(100);
//开辟一个容量为100的栈
intn,d;
//定义两个数,分别为转换的数和转换进制
请输入一个十进制数:
请输入你想转换的进制(2-9):
d;
endl;
intt;
//定义一个临时参数
while(n>
0)//建立一个循环,把每次的余数压入栈
t=n%d;
s1.push(t);
n=n/d;
while(s1.top>
-1){
s1.pop();
}//把栈中的数取出并输出到屏幕
tree.cpp
选择二叉链式存储结构作为二叉树的存储结构,
//实现二叉树的基本操作,包括二叉树的建立、输出、前序
//遍历、中序遍历、后序遍历、求树高、统计叶子总数等
//tree.h二叉树类的头文件
//tree.cpp二叉树类成员函数的实现文件,其对应的头文件是tree.h,主函数文件是main.h
//main.cpp包含有main函数的主程序
tree.h
二叉树类的头文件
tree.cpp
main.cpp
iostream>
stack>
usingnamespacestd;
typedefchardatatype;
//定义date类型
structBTreeNode
datatypedata;
structBtreeNode*lchild;
//建立左孩子
structBtreeNode*rchild;
//建立右孩子
classBLinkTree{
public:
structBTreeNode*t;
BTreeNode*head;
intfirst;
BLinkTree(void)
t=NULL;
};
//构造函数
BTreeNode*CreateBTree(intfirst);
//建立二叉树
voidPreOrder(BTreeNode*t);
//递归前序遍历
voidInOrder(BTreeNode*t);
//递归中序遍历
voidPostOrder(BTreeNode*t);
//递归后序遍历
voidFPreOrder(BTreeNode*t);
//非递归前序遍历
voidFInOrder(BTreeNode*t);
//非递归中序遍历
voidFPostOrder(BTreeNode*t);
//非递归后序遍历
intBTreeDepth(BTreeNode*t,intfirst);
//求树高
intLeaves(BTreeNode*t);
//求叶子总数
voidGetBTree(BTreeNode*t,intfirst);
//输出二叉树
二叉树类的成员函数的实现,实现二叉树的基本操作,包括二叉树的建立、输出、前序遍历、中序遍历、后序遍历、求树高、统计叶子总数等
tree.cpp
tree.h"
//建立二叉树//函数功能:
建立一棵二叉树
first//参数返回值:
current表示二叉树结点
BTreeNode*BLinkTree:
CreateBTree(intfirst)
charch;
BTreeNode*current;
ch;
if(ch=='
.'
)
current=NULL;
else
current=newBTreeNode;
current->
data=ch;
if(first)
head=current;
first=0;
}
lchild=CreateBTree(first);
rchild=CreateBTree(first);
returncurrent;
//二叉树的前序遍历//函数功能:
对二叉树进行前序遍历
intfirst//参数返回值:
voidBLinkTree:
PreOrder(BTreeNode*t)
if(t!
t->
PreOrder(t->
lchild);
rchild);
//二叉树的非递归前序遍历//函数功能:
实现前序遍历非递归算法的实现
FPreOrder(BTreeNode*t)
stack<
BTreeNode*>
s;
while((!
s.empty())||(t!
=NULL))
while(t!
s.push(t);
t=t->
lchild;
if(!
s.empty())
t=s.top();
s.pop();
rchild;
//二叉树的中序遍历//函数功能:
对二叉树进行中序遍历
//函数参数intfirst//参数返回值:
无
InOrder(BTreeNode*t)
InOrder(t->
//二叉树的非递归中序遍历//函数功能:
实现中序遍历非递归算法的实现
FInOrder(BTreeNode*t)
s.empty())
{
t=s.top();
s.pop();
cout<
t=t->
//二叉树的后序遍历//函数功能:
对二叉树进行后序遍历
PostOrder(BTreeNode*t)
PostOrder(t->
PostOrder(t->
//二叉树的非递归后序遍历//函数功能:
实现后序遍历非递归算法的实现
FPostOrder(BTreeNode*t)
intflag;
stack<
s1;
int>
s2;
s1.empty())||(t!
s1.push(t);
s2.push(0);
t=t->
//左孩子
if(!
s1.empty())
t=s1.top();
s1.pop();
flag=s2.top();
s2.pop();
if(flag==1)
}
else
s1.push(t);
s2.push
(1);
//求树高//函数功能:
求二叉树的树高
表示访问的结点intfirst//参数返回值:
CDepth树的深度
intBLinkTree:
BTreeDepth(BTreeNode*t,intfirst)
intCDepth,LDepth,RDepth;
structBTreeNode*current;
if(first==1)
current=head;
first=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验