数据结构重点JackWord文档格式.docx
《数据结构重点JackWord文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构重点JackWord文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
}
if(i<
1||i>
last+1){
printf(“插入位置错误!
\n”);
exit(-2);
else{
for(k=last-1;
k>
=i;
k--)
list[k+1]=list[k];
list[i]=x;
++last;
}
顺序表的删除:
Remove(inti){//删除i位置的元素
intk;
if(i<
1||i>
last){//下表以1作为起始索引
printf(“表中不存在位置为i的元素\n”);
exit(-1);
}
for(k=i;
k<
=last-1;
k++)//后面元素前移
list[k]=last[k+1];
last--;
顺序表的并:
voidUnion(SeqList<
int>
&
A,SeqList<
B)
{
intn=A.Length();
intm=B.Length();
for(inti=0;
i<
=m;
i++){
intx=B.Get(i);
//在B中取一元素
intk=A.Find(x);
//在A中搜索它
if(k==-1)//若未找到插入它
A.Insert(n,x);
n++;
}
顺序表的交:
voidIntersection(SeqList<
A,SeqList<
B)
{
intn=A.Length();
intm=B.Length();
inti=0;
while(i<
n){
intx=A.Get(i);
//在A中取一元素
intk=B.Find(x);
//在B中搜索它
if(k==-1){
A.Remove(i);
n--;
elsei++;
//未找到在A中删除它
链表的插入:
intList:
:
Insert(intx,inti){
//在链表第i个结点处插入新元素x
ListNode*p=current;
current=first;
for(k=0;
k<
i-1;
k++)//找第i-1个结点
if(current==NULL)break;
elsecurrent=current->
link;
if(current==NULL&
&
first!
=NULL){
cout<
<
“无效的插入位置!
\n”;
current=p;
return0;
}
ListNode*newnode=//创建新结点
newListNode(x,NULL);
if(first==NULL||i==0){//插在表前
newnode->
link=first;
first=current=newnode;
else{//插在表中或末尾
link=current->
current=current->
link=newnode;
return1;
链表的删除:
Remove(inti){
//在链表中删除第i个结点
ListNode*p,*q;
intk=0;
if(i==0)//删除表中第1个结点
{q=first;
current=first=first->
else{
p=current;
//找第i-1个结点
for(k=0;
i-1;
k++)
if(current==NULL)break;
elsecurrent=current->
if(current==NULL||current->
link==NULL){
cout<
“无效的删除位置!
return0;
else{//删除表中或表尾元素
q=current->
//重新链接
link=q->
}
Typex=q->
data;
deleteq;
//删除q
returnx;
//返回第i个结点的值
五、线性表的存储结构:
顺序存储结构
六、栈与队列的定义:
栈:
只允许在一端插入和删除的线性表,允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)
特点:
⏹后进先出(LIFO)
⏹先进后出(FILO)
队列:
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
⏹队尾(rear)——允许插入的一端
⏹队头(front)——允许删除的一端
☐队列中没有元素时,称为空队列
☐队列特点
⏹先进先出(FIFO)
七、假溢出及怎样避免:
☐当front=-1,rear=M-1时,再有元素入队发生溢出——真溢出
☐当front-1,rear=M-1时,再有元素入队发生溢出——假溢出
☐假溢出的解决方法?
当rear=MAXSIZE+1时,即超过队列末端时,
令rear=1;
从而使队列的首尾相连接。
用表达式描述:
if(rear>
MAXSIZE)
rear=1;
else
rear=rear+1;
八、二叉树的三种遍历:
☐先序遍历
⏹先访问根节点,然后分别先序遍历左子树、右子树
⏹根节点最先遍历
☐中序遍历
⏹先中序遍历左子树,然后访问根节点,最后中序遍历右子树
⏹根在中间
☐后序遍历
⏹先后序遍历左、右子树,然后访问根节点
⏹根在最后
先序遍历:
递归算法
voidpreorder(bitree*root)
{
bitree*p;
p=root;
if(p!
=NULL){
printf(“%c“,p->
data);
preorder(p->
lchild);
preorder(p->
rchild);
中序遍历:
voidinorder(biteee*root)
if(p!
=NULL)
{
inorder(p->
printf(“%c“,p->
后序遍历:
voidpostorder(bitree*root)
postorder(p->
哈夫曼树:
⏹带权路径长度最短的树
⏹路径
☐从树中一个节点到另一个节点之间的分支构成这两个节点间的路径
⏹路径长度
☐路径上的分支数
⏹树的路径长度
☐从树根到每一个节点的路径长度之和
完全二叉树包含满二叉树。
九、图
有向图的识图、图的遍历
深度优先遍历:
深度优先遍历结果:
V1,V2,V4,V8,V5,V3,V6,V7
广度优先遍历:
V1,V2,V3,V4,V5,V6,V7,V8
Prim算法:
所得生成树权值和=1+2+3+5+6+8+10
=35
Kruskal算法:
structSGNode
intkey;
//结点自身标识
//与当前结点相邻的结点集合,及其与相邻结点之间路径的权值
map<
int,float>
neighNodes;
classCGraph
public:
//构造、析构函数
CGraph();
~CGraph();
public:
//其他函数,供实例调用
voidDFS();
voidBFS();
voidPrim();
voidKruskal();
protected:
//属性变量
/*自行设计完成*/
private:
//成员变量
vector<
SGNode>
NodeSet;
十、L、U分解、Jacobi迭代、Gauss-Seidel迭代
十一、最小二乘法、超定方程、
十二、实际问题水准网平差