最近小编在认真复习数据结构基础知识,总结了一些基础中的重点。但愿对你们也有帮助。算法
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
小编将这些基础知识与你们分享。不管是考试仍是工做中的应用,终归万变不离其宗。