3.2 線性表的定義數組
3.3 線性表的抽象數據類型行:建立,銷燬,增刪改查等等操做性能
3.4 線性表之順序存儲 :順序表spa
3.5 順序表的插入和刪除:至關於數組的插入和刪除;而後把當前length +(-) 1;指針
順序表的優勢:無須爲表示表中的元素之間的邏輯關係而添加額外的存儲空間;能夠快速地訪問存取表中的任意位置子的元素;遞歸
缺點:插入和刪除操做須要移動大量的元素;當線性表長度變化較大時,難以肯定存儲空間的容量;形成存儲空間的碎片;隊列
3.6 線性表的鏈式存儲結構:鏈表解決了順序表的增刪須要移動大量元素的問題;內存
3.7 單鏈表的讀取:next指針遍歷;循環
3.8 單鏈表的插入和刪除:插入s : s->next=p->next; p->next=s; 刪除s:s=q; p->next=s->next; free(s);遍歷
3.9 單鏈表的整表建立:(插入) 頭插和尾插:尾插最後指向NULL;數據類型
3.10 單鏈表的整表刪除:挨個刪除 : p=head->next; while(p!=NULL) { q=p->next; free(p) ; p=q; }
3.11 單鏈表結構與順序結構存儲結構優缺點:
存儲分配方式:順序表存儲單元連續,線性表任意存儲位置;
時間性能:順序表方便查找;單鏈表適合插入和刪除;
空間性能:順序表需預先分配存儲空間,分大了浪費,分小了容易上溢; 單鏈表通常不須要擔憂內存分配問題;
3.12 靜態鏈表 :用數組描述的鏈表叫作靜態鏈表;
數據 +遊標 數組的第一個元素的遊標存放備用鏈表的第一個節點的下標,數組的最後一個元素的cur存放第一個有數值的元素的下標;
靜態鏈表的插入刪除:使用第一個備用空閒的下標,把他打得下一個數組的遊標用來作備用(即賦值給數組首元素的遊標); 把乙位置的遊標指向新元素 ,新元素的遊標改成乙的遊標;
刪除:將結點的遊標改成數組首元素的遊標;數組的首元素的遊標置爲1;
靜態鏈表的的優缺點:
在插入和刪除操做時只須要修改遊標,不須要移動元素;從而改進了在順序存儲結構中的插入和刪除須要移動大量元素的缺點;
沒有解決連續存儲分配帶來的錶廠難以肯定的問題;失去了順序存儲結構隨機存取的特性;
3.13 循環鏈表:尾不指向NULL;指向頭;
3.14 雙向鏈表:前驅後繼
4.2 棧的定義:先進先出
4.4 棧的順序存儲結構及實現:進棧:s.puch_back(); s.top++; 出棧 :s.pop_back(); s.top--;
4.5 兩棧共享空間:top1+1=top2;爲棧滿;
4.6 棧的鏈式存儲結構及實現:把棧用指針鏈接起來;
4.7 棧的做用:方便實用 push_back pop_back;
4.8 棧的應用:遞歸 調用的回調層次使用了棧來恢復數據;
4.9 棧的應用 ——四則運算表達式求值;
例如計算 9+(3-1)*3 +10/2;
計算機會根據表達式生成後綴表達式:9 3 1 - 3 * 10 2 / +;
全部的符號都出如今運算數字的後面; //本例須要畫圖理解
計算機根據後綴表達式 先將 931依次進棧;接下來遇到了 ‘-’;將1出棧做爲減數,3做爲被減數並運算3-1=2;將2進棧; 再將3進棧,接下來遇到了‘*’ ,將3和2出棧,將2*3=6進棧;接下來遇到了‘+’;將9和6出棧,將9+6=15入棧;將10入棧,將2入棧,而後遇到了‘/’;將10和2出棧,將10/2入棧;而後遇到了‘+’;將15和5出棧,15=5=20;後面表達式結束則不繼續入棧;
咱們討論了這麼多都是由後綴表達式去解決的運算,那麼後綴表達式又是怎麼造成的呢?
即9+(3-1)*3 +10/2 ==》 9+(3-1)*3 +10/2;是怎麼運算的呢?
初始化一空棧用來對符號進行出棧;將 9輸出,將‘+’進棧,接下來是‘(’,左括號還未配對因此進棧,將3輸出,將‘-’進棧;將1輸出;此時碰見了 ')' 與前面的 '(' 匹配並輸出兩個括號之間的符號即 '-';因此如今輸出的爲9 3 1 - ;接着碰見 '*';由於 '+' 優先級小於 '*' ;全部不輸出 '*' 進棧;接着是3輸出;以後是 '+' ,此時棧頂元素 '*' 優先級比‘+' 高,所以棧中元素出棧並輸出(所有出棧);而後將 '+' 入棧;將10輸出,將 '/' 入棧;將2輸出;將 /出棧;將 + 出棧;
由此能夠發現:
1:將中綴轉爲後綴:棧用來進出運算的符號;
2:將後綴進行運算:棧用來進出運算的數字;
4.10 隊列的定義: 先進先出
4.12 循環隊列 :尾指向頭 rear=front ; 入隊: assert((q->next+1)%MAXSIZE==q->front); q->data[q->rear]=e; q->rear=(q_rear+1)%MAXSIZE; 出隊:移動front指針;
4.13 隊列的鏈式存儲結構:把隊列用指針鏈接起來;