線性結構:
線性結構是乙個有序資料元素的集合。
常用的線性結構有:線性表,棧,佇列,雙佇列,串。
關於廣義表、陣列,是一種非線性的資料結構。
常見的非線性結構有:二維陣列,多維陣列,廣義表,樹(二叉樹等)。
分類:資料結構課程中資料的邏輯結構分為線性結構和非線性結構。
對於資料結構課程而言,簡單地說,線性結構是n個資料元素的有序(次序)集合。
特徵:1.集合中必存在唯一的乙個"第乙個元素";
2.集合中必存在唯一的乙個"最後的元素";
3.除最後元素之外,其它資料元素均有唯一的"後繼";
4.除第一元素之外,其它資料元素均有唯一的"前驅"。
資料結構中線性結構指的是資料元素之間存在著「一對一」的線性關係的資料結構。
如(a0,a1,a2,…,an),a0為第乙個元素,an為最後乙個元素,此集合即為乙個線性結構的集合。
相對應於線性結構,非線性結構的邏輯特徵是乙個結點元素可能對應多個直接前驅和多個後繼。
1.線性表:
線性表是最基本、最簡單、也是最常用的一種資料結構。線性表(linear list)是資料結構的一種,乙個線性表是n個具有相同特性的資料元素的有限序列。
線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的(注意,這句話只適用大部分線性表,而不是全部。比如,迴圈鍊錶邏輯層次上也是一種線性表(儲存層次上屬於鏈式儲存,但是把最後乙個資料元素的尾指標指向了首位結點)。
儲存:線性表可以用陣列進行儲存。
查詢:從頭到尾乙個個進行查詢,複雜度為o(n)。
插入:將相應位置之後的資料全部向後挪一位,記得要從後向前挪動。
for
(i=n+
1;i>t;i--
)a[i]
=a[i-1]
;
刪除:
將相應位置之後的資料往前挪動一位,從前向後挪動。
for
(i=n;i)a[i]
=a[i+1]
;
堆疊:
堆疊都是一種資料項按序排列的資料結構,只能在一端(稱為棧頂(top))對資料項進行插入和刪除。在微控制器應用中,堆疊是個特殊的儲存區,主要功能是暫時存放資料和位址,通常用來保護斷點和現場。
堆疊儲存:
就像乙個桶子,往裡面放東西,先放進去的後面才能拿出來,也就是『先進後出』。
堆的申請:
p1 =
(char*)
malloc(10
);
2.佇列
先進者先出,就是"佇列" 我們可以想象成,排隊買票,先來的先買,後來的只能在末尾,不允許插隊。
佇列的兩個基本操作:入隊 將乙個資料放到佇列尾部;出隊 從佇列的頭部取出乙個元素。佇列也是一種操作受限的線性表資料結構 它具有先進先出的特性,支援隊尾插入元素,在隊頭刪除元素。
佇列的概念很好理解,佇列的應用也非常廣泛如:迴圈佇列、阻塞佇列、併發佇列、優先順序佇列等。
佇列可以用陣列q[1…m]來儲存,陣列的上界m即是佇列所容許的最大容量。在佇列的運算中需設兩個指標:head,隊頭指標,指向實際隊頭元素;tail,隊尾指標,指向實際隊尾元素的下乙個位置。一般情況下,兩個指標的初值設為0,這時隊列為空,沒有元素。陣列定義q[1…10]。q(i) i=3,4,5,6,7,8。頭指標head=2,尾指標tail=8。佇列中擁有的元素個數為:l=tail-head。現要讓排頭的元素出隊,則需將頭指標加1。即head=head+1這時頭指標向上移動乙個位置,指向q(3),表示q(3)已出隊。如果想讓乙個新元素入隊,則需尾指標向上移動乙個位置。即tail=tail+1這時q(9)入隊。當隊尾已經處理在最上面時,即tail=10,如果還要執行入隊操作,則要發生"上溢",但實際上佇列中還有三個空位置,所以這種溢位稱為"假溢位"。
克服假溢位的方法有兩種。一種是將佇列中的所有元素均向低位址區移動,顯然這種方法是很浪費時間的;另一種方法是將陣列儲存區看成是乙個首尾相接的環形區域。當存放到n位址後,下乙個位址就"翻轉"為1。在結構上採用這種技巧來儲存的佇列稱為迴圈佇列。
下面給乙個例子,充分運用了堆疊和佇列:
佇列和棧是兩種重要的資料結構,它們具有push k和pop操作。push k是將數字k加入到佇列或棧中,pop則是從佇列和棧取乙個數出來。佇列和棧的區別在於取數的位置是不同的。
佇列是先進先出的:把佇列看成橫向的乙個通道,則push k是將k放到佇列的最右邊,而pop則是從佇列的最左邊取出乙個數。
棧是後進先出的:把棧也看成橫向的乙個通道,則push k是將k放到棧的最右邊,而pop也是從棧的最右邊取出乙個數。
假設佇列和棧當前從左至右都含有1和2兩個數,則執行push 5和pop操作示例圖如下:
push 5 pop
佇列 1 2 -------> 1 2 5 ------> 2 5
push 5 pop
棧 1 2 -------> 1 2 5 ------> 1 2
現在,假設佇列和棧都是空的。給定一系列push k和pop操作之後,輸出佇列和棧中存的數字。若佇列或棧已經空了,仍然接收到pop操作,則輸出error。
input
第一行為m,表示有m組測試輸入,m<100。
每組第一行為n,表示下列有n行push k或pop操作。(n<150)
接下來n行,每行是push k或者pop,其中k是乙個整數。
(輸入保證同時在佇列或棧中的數不會超過100個)
output
對每組測試資料輸出兩行,正常情況下,第一行是佇列中從左到右存的數字,第二行是棧中從左到右存的數字。若操作過程中佇列或棧已空仍然收到pop,則輸出error。輸出應該共2*m行。
sample input24
push 1
push 3
poppush 5
1pop
sample output
3 51 5
error
error
#include
intmain()
,b[10000]=
,head=
0,last=
0,k=
0,flag=0;
char p[
200]
;scanf
("%d"
,&m)
;for
(x=0
; x)else
if(p[1]
=='o'
)else
if(k==0)
else
k--;}
}if(flag)
continue;if
(last!=head&&flag==0)
if(k!=
0&&flag==0)
}return0;
}
這裡沒有運用鍊錶而是用的陣列,方法很簡單,用兩個陣列存資料,乙個運用堆疊的思想,另外乙個運用佇列的思想,當用堆疊時,就last–,用佇列時就head++
思維清晰,**相對較容易。
多項式乘法與加法:
定義乙個結構體來存係數和指數,加法就是讓相同指數的的相應係數相加,乘法就是每乙個項與另外乙個式子的其他項相乘。
typedef
struct node *pnode;
//節點指標型別
struct node
;
求和函式:
pnode addpoly
(pnode h1, pnode h2)
else
if(s1->exp > s2->exp)
else
if(c !=0)
}while
(s1 !=
null)}
while
(s2 !=
null)}
return s;
}
慕課matlab學習 第二章 011 稀疏矩陣
第二節 矩陣變換 稀疏矩陣 矩陣的儲存方式 1 完全儲存方式 2 稀疏儲存方式 稀疏儲存方式只儲存矩陣的非零元素的值及其位置,即行號和列號。注意,採用稀疏儲存方式時,矩陣元素的儲存順序並沒有改變,也是按列的順序進行儲存。1 完全儲存方式與稀疏儲存方式之間的轉化 a sparse s 將矩陣s轉化為稀...
慕課matlab學習 第二章 08 矩陣變換操作
第二節 矩陣變換 矩陣變換 主要內容 求解 對角陣 三角陣 矩陣的轉置 矩陣的旋轉 矩陣的翻轉 矩陣求逆 對角矩陣 3種對角矩陣 對角矩陣 只有對角線上有非零元素的矩陣。數量矩陣 對角線上的元素相等的對角矩陣。單位矩陣 對角線上的元素都為1的對角矩陣。1 提取矩陣的對角線元素 diag a 提取矩陣...
慕課軟體質量保證與測試 第二章 單元測試
3 下一章 1單選 1分 在軟體生命週期的哪乙個階段,軟體缺陷修復的成本最高 a.需求分析 編制產品說明書 b.產品發布1.00 1.00c.編碼d.設計 正確答案 b 2單選 1分 下列中不屬於測試原則的是 a.找到的缺陷越多,軟體遺留的缺陷就越少1.00 1.00 b.完全測試程式是不可能的 c...