線性表:具有相同資料型別的n(n>0)個資料元素的有限序列。
主要有順序儲存和鏈式儲存。
順序儲存:
特點:位址連續,隨機/訪問,順序儲存。
方式:靜態和動態。
優點:儲存密度大;隨機儲存:快速訪問表中任一位置元素。
缺點:插入刪除移動大量元素;對儲存空間要求高,會產生儲存空間的碎片。
1.插入
bool listinsert(sqlist &l,inti,elemtype e)
最好的情況:表尾插入 只用加乙個資料,時間複雜度為o(1);
最壞的情況:表頭插入,所有元素後移一位,時間複雜度為o(n);
平均時間複雜度:o(n)。
2.刪除
bool listdelete(sqlist &l,int i,elemtype&e)
時間複雜度如插入,但是具體要分析。
線性表鏈式儲存
通過一組任意的儲存單元來儲存線性表中的資料元素。為了建立起資料元素之間的線性關係,對每個鍊錶結點,除了自身資訊,還存放了乙個指向其後繼的指標。
單鏈表:單個指標
typedef struct lnodelnode,*linklist;
通常用「頭指標」來標識乙個單鏈表,如linklist l,那麼頭指標l就代指乙個單鏈表。
單鏈表第乙個結點之前附加乙個結點,稱為「頭結點」。其資料域可不設任何資訊,也可記錄表長等資訊。頭結點指標域指向線性表第乙個元素結點。
頭結點:操作方便:第一元素前插入和刪除元素和第一結點操作與其他結點一致;鍊錶無論空或不空,操作也統一。
頭指標始終指向鍊錶的第乙個結點。
雙鏈表:雙指標
typedef struct dnodednode,*dlinklist;
插入:給插入的前乙個元素加輔助指標p,插入元素加輔助指標s
1.s->next=p->next;
2.p->next->prior=s;
3.s->prior=p;
4.p->next=s;;
刪除:刪除的前乙個元素加乙個輔助指標p,刪除的指標加乙個輔助指標q
1.p->next=q->next;
2.q->next->prior=p;
3.free(q);
迴圈單鏈表:
與單鏈表的區別在於,表中最後乙個結點的指標不是null,而是改為指向頭結點,從而整個鍊錶形成乙個環。
從任何乙個結點出發都能訪問到鍊錶的每乙個元素。
1.判斷條件:頭結點的後繼指標是否等於頭指標。
2.可對迴圈單鏈表不設頭指標而僅設尾指標,使效率更高。
迴圈雙鏈表:區別於雙鏈表是首尾結點構成環。
1.尾結點後繼指標指向表頭結點,頭結點的前驅指標指向尾結點。
2.當為空表時,頭結點的prior域和next域都等於l。
靜態鍊錶:
借助陣列來描述線性表的鏈式儲存結構,結點也有資料域data和指標域next,此指標是結點的相對位址(數值下標),又稱游標。
對插入與刪除操作與動態鍊錶(動態分配記憶體的方式)相同,只需修改指標,而不需移動元素。
c語言資料結構學習心得 棧
棧 stack 只允許在一端進行插入或刪除操作的線性表 棧頂 top 棧中允許進行插入和刪除操作的那一端 棧底 bottom 固定的,不允許進行插入或刪除的另一端 1.棧是受限的線性表,所以自然具有線性關係。2.棧中元素後進先出。棧的順序儲存 順序棧 define maxsize 50 定義棧中元素...
資料結構學習 線性表
線性表一般分為順序結構和鏈式結構。順序表裡面元素的位址是連續的,如陣列 鍊錶裡面節點的位址不是連續的,是通過指標連起來的,如單鏈表 順序結構 優點 易於查詢,索引快 list n 這樣的操作,o 1 複雜度。缺點 擴充套件性弱,不易刪除 插入,這兩項操作均是o n 的時間複雜度 鍊錶結構 優點 擴充...
資料結構學習 線性表
考試前複習下資料結構,把一些知識點整理在這!主要參考了殷人昆主編的 資料結構 用物件導向方法與c 語言描述 這本書,以及中山大學劉聰老師的課件內容!鍊錶雙鏈表 線性表 linear list 是由n n 0 個資料元素 結點 a 0 a 1 a 2 a n 1 組成的有限序列。維基百科 線性表是乙個...