数据结构学习总结

最近小编在认真复习数据结构基础知识,总结了一些基础中的重点。希望对大家也有帮助。


1.双向循环链表的插入算法:

如下图所示效果:


在第一个元素和第二个元素中间插入标号为1‘的新元素。实现关键代码如下:

Status ListInsert_Dul(DuLinkList &L,int i,ElemType e){
//在带头节点的双向链表L中第i个位置之前插入元素e,i的和法制为1<=i<=表长+1
if(!(p=GetElemP_Dul(L,i)))
return ERROR;
s=new DuLNode;//生成新的节点s
s->data=e;//将节点s数据域置为e
s->prior=p->prior;//将节点s插入L中,需要修改4个指针域
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}


2、栈的相关操作

以顺序栈(栈的顺序存储结构)为例

限定在表尾进行插入和删除操作的顺序表

类型定义:

sypedef struct{
       SElemType *base;//base成为栈底指针,始终指向栈底;(当base=NULL时,标明栈结构不存在)
       SElemType *top;//top为栈顶指针(top的初始值指向栈底;空栈时top=base)
       int stacksize;//当前栈可使用的最大容量
}SqStack;

SqStack s;

需要注意的几点:

1)栈空条件:s.top=s.base此时不能出栈;

2)栈满条件:s.top-s.base>=s.stacksize;

3)进栈操作:*s.top++=e;或*s.top=e;s.top++;

4)退栈操作:e=*--s.top或s.top--;e=*s.top;

5)当栈满时再做进栈运算必定产生控件溢出,叫做“上溢”

6)当栈空时再做退栈运算也将产生溢出,简称“下溢”


3、队列的相关操作

以循环队列为例

1)存储队列的数组被当作首尾相接的表处理。

2)队头、队尾的指针加1时从maxSize-1直接进到0。

3)队头指针进1:Q.front=(Q.front+1)%MAXSIZE;队尾指针进1:Q.rear=(Q.rear+1)%MAXSIZE

4)队列初始化Q.front==Q.rear=0;

5)队空条件:Q.front==Q.rear;

6)队满条件:(Q.rear+1)%MAXSIZE==Q.front;

7)队列长度:(Q.rear-Q.front+MAXSIZE)%MAXSIZE;


4、图的相关概念

1)从无向图的邻接矩阵可以得出如下结论:

@矩阵是对称的;

@第i行或第i列的个数为顶点i的度;

@矩阵中I的个数的一半为图中边的数目;

@很容易判断顶点i和顶点j之间是否有边相连


2)从有向图的邻接矩阵可以得出如下结论:

@矩阵不一定是对称的;

@第i行中I的个数为顶点i的出度

@第i列中1的个数为顶点i的入度;

@矩阵中1的个数为图中弧的数目;

@很容易判断顶点i和顶点j是否弧相连;


3)从无向图的邻接表可以得到如下结论:

@第i个链表中节点数目为顶点i的度

@所有链表中节点数目的一半为图中边数;

@占用的存储单元数目为n+2e


4)从有向图的邻接表可以得到如下结论:

@第i个链表中结点数目为顶点i的出度

@所有链表中结点数目为图中弧数

@占用的存储单元数目为n+e


小编将这些基础知识与大家分享。无论是考试还是工作中的应用,终归万变不离其宗。


转载于:https://www.cnblogs.com/fengkungui/p/6789572.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值