線性結構即將告一段落,來個簡單總結一下。數組
連續存儲(數組)spa
//定義一個數組結構體 struct Arr { int * pBase; //保存數組的指針 int len; //保存數組的長度 int cnt; //數組元素的有效個數 };
對數組的操做,主要體如今數據的移動上。好比在插入一個元素和刪除一個元素的時候,改位置以後的元素要相對應的前移或後移。結構體內須要三個數組的指針,數組的長度,數組中有效元素的個數,經過這三個參數完成對數組的增添,刪除和輸出。.net
離散存儲(鏈表)指針
//建立一個結構體 struct Node { int data; struct Node * pNext; };
相對於數組來講,鏈表在存儲刪除過程更加的靈活,增添元素和刪除元素,再也不須要對其後的元素進行移動,減小了時間複雜度。建立鏈表須要多建立一個頭指針和頭節點,這樣方便了對鏈表的操做。code
棧blog
//節點結構體 typedef struct Node { int data; struct Node * pNext; }NODE,*PNODE; //棧結構體 typedef struct Stack { PNODE pTop; PNODE pBottom; }STACT,*PSTACT;
棧的特性是「先進後出」,全部相對於鏈表來講,棧的功能受到了限制,好比說不能從中間插入和刪除。棧的結構體中有兩個元素,指針棧頂和指針棧底,棧底永遠指向一個無沒有實際意義的元素,這就好像鏈表中的頭節點,都是方便了操做。隊列
隊列 ci
//定義機構體 typedef struct Queue { int * pBash; //存放數組 int front; //隊列第一個元素下標 int rear; //隊列最後一個元素的下一個元素的下標 }QUEUE,* PQUEUE;
隊列的操做要比以前的三種方式都複雜一些,尤爲是要用數組實現靜態隊列的時候,必須是一個循環隊列。結構體中包含三個元素,第一個指針變量保存的是數組的首地址,front是隊列頭部的下標,rear保存的是隊列尾部的下標,隊列的特性是"先進先出",須要注意的是,在判斷靜態隊列是否已滿的狀況,更經常使用的作法是,空出一個存儲單元不使用,判斷【queue -> front == (queue -> rear + 1)%數組長度】便可。一樣的,隊列也不容許在數組的中間進行插入和刪除。get
學PHP的小螞蟻 博客 http://my.oschina.net/woshixiaomayi/blog博客