數據結構學習總結

最近小編在認真複習數據結構基礎知識,總結了一些基礎中的重點。但願對你們也有幫助。算法


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


小編將這些基礎知識與你們分享。不管是考試仍是工做中的應用,終歸萬變不離其宗。

相關文章
相關標籤/搜索