最近小編在認真複習數據結構基礎知識,總結了一些基礎中的重點。但願對你們也有幫助。算法
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
小編將這些基礎知識與你們分享。不管是考試仍是工做中的應用,終歸萬變不離其宗。