逗比丢数据结构Word文件下载.docx
- 文档编号:18579820
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:30
- 大小:105.71KB
逗比丢数据结构Word文件下载.docx
《逗比丢数据结构Word文件下载.docx》由会员分享,可在线阅读,更多相关《逗比丢数据结构Word文件下载.docx(30页珍藏版)》请在冰豆网上搜索。
(ostream&
os,CSeqList&
//成员函数
intLength()const;
intRemove(intz);
//删除
intFind(intx);
//查找
intLocate(inti)const;
//定位
intInsert(int&
x,inti);
//插入
intRemove(int&
x);
//删除
intNext(int&
//后继
intPrior(int&
//前驱
intIsEmpty();
intIsFull();
intGet(inti);
//提取
voidinnt(intcursize);
//成员变量
int*_data;
int_curSize;
int_maxSize;
};
//类实现
CSeqList:
:
CSeqList()
{
}
CSeqList(intsize)
_maxSize(size)
_curSize(0)
{_data=newint[size];
innt(10);
~CSeqList()
{if(_maxSize>
0)
delete[]_data;
voidCSeqList:
innt(intcursize)
{for(inti=0;
i<
cursize;
i++)
_data[i]=i*100;
_curSize=cursize;
intCSeqList:
Length()const
_curSize;
cout<
_data[i]<
"
;
cout<
endl;
return_curSize;
Insert(int&
x,inti)//插入
{//元素移动
for(intj=_curSize-1;
j>
=i;
j--)
{_data[j+1]=_data[j];
}
_data[i]=x;
_curSize++;
for(intk=0;
k<
k++)
cout<
_data[k]<
return0;
Remove(intz)//删除
{for(intj=z;
j<
=_curSize;
j++)
_data[j]=_data[j+1];
_curSize--;
for(intg=0;
g<
_curSize;
g++)
_data[g]<
return0;
Find(intx)//查找
{for(intj=0;
_maxSize;
if(_data[j]==x)
{cout<
j+1;
return0;
}
cout<
return-1;
ostream&
sl)
for(inti=0;
sl._curSize;
{
sl._data[i]<
returnos;
template<
classType>
classSeqList{
//顺序表存储数组
Type*data;
//最大允许长度
intMaxSize;
//当前最后元素下标
intlast;
SeqList(intMaxSize=defaultSize);
~SeqList(){delete[]data;
intfriendoperator<
os,SeqList&
public:
intLength()const
{returnlast+1;
//查找
intFind(Type&
x)const;
//定位
intInsert(inti,Type&
x);
//插入
intRemove(inti);
//删除
intNext(Type&
//后继
intPrior(Type&
//前驱
intIsEmpty(){returnlast==-1;
intIsFull()
{returnlast==MaxSize-1;
TypeGet(inti){//提取
returni<
0||i>
last?
NULL:
data[i];
//链式存储线性表
structSLNode{
intdata;
//数据域
structSLNode*prior;
//指针域
structSLNode*next;
classCLinkedList{
CLinkedList(void);
~CLinkedList(void);
CLinkedList(constCLinkedList&
CLinkedList&
operator=(constCLinkedList&
os,CLinkedList&
ll);
intlength()const;
intsearch(int&
//查找
intinsert(int&
//插入
intremove(int&
//删除
voidsort();
//排序
intisEmpty();
voidsetNull();
//置空
intget(inti);
//提取
voidoutput();
private:
SLNode*head;
int_size;
CLinkedList:
CLinkedList()
head(NULL)
_size(0)
~CLinkedList()
intCLinkedList:
length()const
{return_size;
search(int&
x)const
{if(NULL==head)
return-1;
intresult=1;
SLNode*cur;
cur=head;
while(cur!
=NULL)
{if(cur->
data==x)
returnresult;
else
{cur=cur->
next;
result++;
insert(int&
x,inti)
{if(i<
=0)//越界
if(_size==0)
{//插入结点操作
SLNode*temLN=newSLNode();
temLN->
data=x;
next=NULL;
head=temLN;
_size++;
return1;
elseif(i>
_size)//在链表尾部插入
{SLNode*cur=head;
while(cur->
next!
cur=cur->
//插入结点操作
SLNode*temLN=newSLNode();
cur->
next=temLN;
SLNode*cur=head;
for(intk=1;
i-1;
{cur=cur->
SLNode*temLN=newSLNode();
temLN->
next=cur->
cur->
_size++;
intCLinkedList:
remove(int&
x)
{SLNode*cur=head;
if(cur->
data==x)//删除表头第一个元素
{head=cur->
return1;
//删除除表头之外的其他位置元素
while(cur->
next->
data==x)//执行删除操作
{cur->
return1;
cur=cur->
isEmpty()
{if(_size==0||head==NULL)
voidCLinkedList:
setNull()
{_size=0;
head=NULL;
get(inti)
=0||i>
_size)
{cout<
下表越界!
"
<
SLNode*cur=head;
i;
returncur->
data;
output()
{SLNode*cur;
while(cur!
data<
intmain(intargc,char*argv[])
/*CSeqListsl(100);
intlen=sl.Length();
len<
inty=1000;
intp=2330;
sl.Insert(y,5);
sl.Remove(6);
sl.Find(p);
*/
CLinkedListmyList;
for(inti=1;
=12;
++i)
{myList.insert(i,i);
输出遍历结果:
endl;
myList.output();
删除第个元素:
intx=9;
myList.remove(x);
//遍历
在第个元素位置处插入一个:
x=20;
myList.insert(x,5);
四、算法测试数据及其运行结果
五、实验小结(问题及心得)
(1)学会了线性表的基本应用,掌握了线性表的基本概念;
(2)掌握了VC++软件的应用,初步掌握了编写程序的基本步骤;
(3)掌握了线性表的实际用途。
实验二:
二、实验内容
利用C++语言编程实现二叉树的构建及其先序、中序、后序遍历算法.
(1)二叉树的构建
(2)二叉树的先序遍历算法及其实现
(3)二叉树的中序遍历算法及其实现
(3)二叉树的后续遍历算法及其实现
vector>
typedefstructBTNode
{intdata;
BTNode*lChild;
BTNode*rChild;
}SBTNode;
classCBinTree
CBinTree();
~CBinTree();
voidcreateBSTree(vector<
int>
&
xArray);
voidinsertNode(SBTNode*&
temNode,BTNode*&
root);
voidInOrder(BTNode*&
//中序遍历
voidPreOrder(BTNode*&
//先序遍历
voidPostOrder(BTNode*&
//后序遍历
BTNode*root;
vector<
xArray;
CBinTree:
CBinTree()
root(NULL)
~CBinTree()
{xArray.clear();
voidCBinTree:
createBSTree(vector<
xArray)
{for(vector<
iteratoriter=xArray.begin();
iter!
=xArray.end();
++iter)
{BTNode*temNode=newBTNode;
temNode->
data=*iter;
lChild=NULL;
rChild=NULL;
insertNode(temNode,root);
insertNode(SBTNode*&
root)
{if(root==NULL)
root=temNode;
else
{if(temNode->
data>
root->
data)
insertNode(temNode,root->
rChild);
lChild);
InOrder(BTNode*&
return;
InOrder(root->
InOrder(root->
PreOrder(BTNode*&
PreOrder(root->
PostOrder(BTNode*&
PostOrder(root->
PostOrder(root->
int_tmain(intargc,_TCHAR*argv[])
{vector<
xArray.push_back(11);
xArray.push_back(19);
xArray.push_back(3);
xArray.push_back(8);
xArray.push_back(13);
xArray.push_back
(2);
xArray.push_back(7);
CBinTreeBT;
BT.createBSTree(xArray);
BT.InOrder(BT.root);
BT.PreOrder(BT.root);
BT.PostOrder(BT.root);
(1)学会了二叉树的基本应用,掌握了二叉树的基本概念;
(2)掌握了二叉树的实际用途。
实验三:
1)图的创建
2)基于深度优先的图的遍历算法的设计与实现
3)基于广度优先的图的遍历算法的设计与实现
4)基于Prim算法的最小生成树的构建
5)基于Kruskal算法的最小生成树的构建
map>
deque>
set>
//用于存储图的节点及其相邻节点的结构体变量类型
structSGNode{intkey;
//结点自身标识
map<
int,float>
neighNodes;
//与当前结点相邻的结点集合,及其与相邻结点之间路径的权值
//用于存储边的结构体变量类型
structSGEdge{intstart;
intend;
//用于存储边及其权重的map容器(注意:
会按照权重自小而大自动排序)
typedefmap<
float,SGEdge>
EdgeSet;
classCMyGraph
CMyGraph(void);
~CMyGraph(void);
//其他函数,供实例调用
voidDFS();
voidDFS(inti,vector<
mystack,bool*visited);
voidBFS();
voidBFS(inti,deque<
mydeque,bool*visited);
voidPrim();
voidKruskal();
protected:
//属性变量
//成员变量
SGNode>
NodeSet;
CMyGraph:
CMyGraph(void)
{floatg[7][7]=
{0,12,1,0,0,0,4},
{12,0,0,11,0,10,0},
{1,0,0,9,2,0,0},
{0,11,9,0,0,8,0},
{0,0,2,0,0,5,3},
{0,10,0,0,0,7,6},
{0,0,0,8,5,7,0},
};
for(inti=0;
8;
{SGNodesg;
sg.key=i;
NodeSet.push_back(sg);
}for(intm=0;
m<
m++)
{for(intn=0;
n<
n++)
{if(g[m][n]!
=0)
{NodeSet[m].neighNodes.insert(map<
value_type(n,g[m][n]));
}
}vector<
iteratoriter;
for(iter=NodeSe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构