数据结构学习总结

最近小编在认真复习数据结构基础知识,总结了一些基础中的重点。但愿对你们也有帮助。算法


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

以下图所示效果:数据结构


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

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; }


二、栈的相关操做指针

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

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

类型定义:io

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

须要注意的几点:class

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)当栈空时再作退栈运算也将产生溢出,简称“下溢”


三、队列的相关操做

以循环队列为例

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;


四、图的相关概念

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


小编将这些基础知识与你们分享。不管是考试仍是工做中的应用,终归万变不离其宗。

相关文章
相关标签/搜索