存儲結構中定義一個集合
① 數據的存儲結構可以用什麼和什麼
數據的存儲結構可以用集合、線性結構、樹形結構和圖形結構,具體如下:
(1)集合:數據結構中的元素之間除了「同屬一個集合」的相互關系外,別無其他關系;
(2)線性結構:數據結構中的元素存在一對一的相互關系;
(3)樹形結構:數據結構中的元素存在一對多的相互關系;
(4)圖形結構:數據結構中的元素存在多對多的相互關系。
常用運算:
(1)檢索。檢索就是在數據結構里查找滿足一定條件的節點。一般是給定一個某欄位的值,找具有該欄位值的節點。
(2)插入。往數據結構中增加新的節點。
(3)刪除。把指定的結點從數據結構中去掉。
(4)更新。改變指定節點的一個或多個欄位的值。
(5)排序。把節點按某種指定的順序重新排列。例如遞增或遞減。
以上內容參考:網路-數據結構
② 分析題: 5 對於一個棧,給出輸入項A、B、C、。如果輸入項序列由A,B,C所組成,試給出全部可能的輸出
輸入項序列是ABC,ACB,BAC。若序列的項屬於一個偏序集,則單調遞增序列就是其中每個項都大於等於之前的項;
若每個項都嚴格大於之前的項,這個序列就是嚴格單調遞增的。類似可定義單調遞減序列。單調序列是單調函數的一個特例。
(2)存儲結構中定義一個集合擴展閱讀:
一個相對正式的定義:其項屬於集合S的有限序列是一個從 {1,2,...,n} 到S的函數,這里n≥0。屬於S的無限序列是從 {1,2,...}(自然數集合)到S的函數。
有限序列也稱作 n 元組。一個從所有整數到到集合的函數有時也稱作雙無限序列,這里將以負整數索引的序列認為是另一個以正整數索引的序列。
③ 【急求】用帶頭單鏈表存儲結構表示兩個集合A、B(集合A、B都是有序遞增的情況)實現集合求並集C的運算
//無頭鏈表
//#define data data_int
#include "head.h"
struct LNode{
// char data[10];
int data;
struct LNode *next;
};
typedef struct LNode * LinkList;
void InitList_L(LinkList &L)//鏈表構造函數
{
L=new LNode;
L->next=NULL;
}
void PrintList_L(LinkList &H)//鏈表顯示函數
{
LinkList L=H;
L=L->next;
while(1)
{
cout<<"data value is "<<L->data<<endl;
L=L->next;
if (L==NULL)
return;
}
}
void Insert_L(LinkList &H,int n=0)//插入鏈表
{
LinkList L=H;
LinkList p=L;
int i=0;
if (n==0)
{
n=1;
while(p->next!=NULL)
{
p=p->next;
n++;
}
}
else if (n<1)
{
cout<<"error"<<endl;
return;
}
for (i=0;i<n-1;i++)
{
if (L->next==NULL)
{
cout<<"error"<<endl;
return;
}
L=L->next;
}
p=new LNode;
cout<<"please input a value:";
cin>>p->data;
p->next=L->next;
L->next=p;
}
LinkList bing_LinkList(LinkList a,LinkList b)
{
LinkList c;
LinkList nc;
LinkList t;
InitList_L(c);
nc=c;
a=a->next;
while (a!=NULL)//復制a到c
{
t=new LNode;
t->data=a->data;
nc->next=t;
t->next=NULL;
nc=nc->next;
a=a->next;
}
b=b->next;
while (b!=NULL)
{
nc=c;
while (nc->next!=NULL)
{
if (nc->next->data==b->data)
break;
nc=nc->next;
}
if (nc->next==NULL)
{
t=new LNode;
t->data=b->data;
nc->next=t;
t->next=NULL;
nc=nc->next;
}
b=b->next;
}
return c;
}
void main()
{
LinkList a,b,c;
int i=0;
InitList_L(a);
cout<<"\nI will input date."<<endl;
for (i=1;i<=3;i++)
Insert_L(a,i);
// PrintList_L(a);
InitList_L(b);
cout<<"\nI will input date."<<endl;
for (i=1;i<=3;i++)
Insert_L(b,i);
// PrintList_L(b);
c=bing_LinkList(a,b);
PrintList_L(c);
}
④ 什麼叫數據的邏輯結構 什麼叫數據的存儲結構
一、數據的邏輯結構。
系統的邏輯結構是從思想的角度上對系統分類,把系統分成若干個邏輯單元,不同邏輯單元分別實現自己的功能。數據的邏輯結構是對數據之間關系的描述,有時就把邏輯結構簡稱為數據結構,數據的邏輯結構分為以下四種:
1、集合結構:集合結構的集合中任何兩個數據元素之間都沒有邏輯關系,組織形式鬆散。
2、線性結構:數據結構中線性結構指的是數據元素之間存在著「一對一」的線性關系的數據結構。
3、樹狀結構:樹狀結構是一個或多個節點的有限集合。
4、網路結構:網路結構是指通信系統的整體設計,它為網路硬體、軟體、協議、存取控制和拓撲提供標准。
二、數據的存儲結構。
數據的存儲結構是指數據的邏輯結構在計算機中的表示。數據的存儲結構分為順序存儲結構和鏈接存儲結構兩種。
1、順序存儲結構:順序存儲方法它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。
2、鏈接存儲結構:鏈接存儲方法它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。
(4)存儲結構中定義一個集合擴展閱讀:
順序儲存結構的原理
在順序存儲中,每個存儲空間含有所存元素本身的信息,元素之間的邏輯關系是通過數組下標位置簡單計算出來的線性表的順序存儲,若一個元素存儲在對應數組中的下標位置為i,則它的前驅元素在對應數組中的下標位置為i-1,它的後繼元素在對應數組中的下標位置為i+1。
⑤ 姒傝--鍩烘湰姒傚康鍜屾湳璇
鏁版嵁錛圖ata錛
銆銆鏁版嵁鏄淇℃伅鐨勮澆浣 瀹冭兘澶熻璁$畻鏈鴻瘑鍒 瀛樺偍鍜屽姞宸ュ勭悊 鏄璁$畻鏈虹▼搴忓姞宸ョ殑 鍘熸枡 銆銆闅忕潃璁$畻鏈哄簲鐢ㄩ嗗煙鐨勬墿澶 鏁版嵁鐨勮寖鐣村寘鎷 銆銆鏁存暟 瀹炴暟 瀛楃︿覆 鍥懼儚鍜屽0闊崇瓑
鏁版嵁鍏冪礌錛圖ata Element錛
銆銆鏁版嵁鍏冪礌鏄鏁版嵁鐨勫熀鏈鍗曚綅 鏁版嵁鍏冪礌涔熺О鍏冪礌 緇撶偣 欏剁偣 璁板綍 銆銆涓涓鏁版嵁鍏冪礌鍙浠ョ敱鑻ュ共涓鏁版嵁欏癸紙涔熷彲縐頒負瀛楁 鍩 灞炴э級緇勬垚 銆銆鏁版嵁欏規槸鍏鋒湁鐙絝嬪惈涔夌殑鏈灝忔爣璇嗗崟浣
鏁版嵁緇撴瀯錛圖ata Structure錛
銆銆鏁版嵁緇撴瀯鎸囩殑鏄鏁版嵁涔嬮棿鐨勭浉浜掑叧緋 鍗蟲暟鎹鐨勭粍緇囧艦寮
錛庢暟鎹緇撴瀯涓鑸鍖呮嫭浠ヤ笅涓夋柟闈㈠唴瀹 鈶 鏁版嵁鍏冪礌涔嬮棿鐨勯昏緫鍏崇郴 涔熺О 鏁版嵁鐨勯昏緫緇撴瀯 錛圠ogical Structure錛 銆銆鏁版嵁鐨勯昏緫緇撴瀯鏄浠庨昏緫鍏崇郴涓婃弿榪版暟鎹 涓庢暟鎹鐨勫瓨鍌ㄦ棤鍏 鏄鐙絝嬩簬璁$畻鏈虹殑 鏁版嵁鐨勯昏緫緇撴瀯鍙浠ョ湅浣滄槸浠庡叿浣撻棶棰樻娊璞″嚭鏉ョ殑鏁板︽ā鍨 鈶 鏁版嵁鍏冪礌鍙婂叾鍏崇郴鍦ㄨ$畻鏈哄瓨鍌ㄥ櫒鍐呯殑琛ㄧず 縐頒負 鏁版嵁鐨勫瓨鍌ㄧ粨鏋 錛圫torage Structure錛 銆銆鏁版嵁鐨勫瓨鍌ㄧ粨鏋勬槸閫昏緫緇撴瀯鐢ㄨ$畻鏈鴻璦鐨勫疄鐜幫紙浜︾О涓烘槧璞★級 瀹冧緷璧栦簬璁$畻鏈鴻璦 瀵規満鍣ㄨ璦鑰岃█ 瀛樺偍緇撴瀯鏄鍏蜂綋鐨 涓鑸 鍙鍦ㄩ珮綰ц璦鐨勫眰嬈′笂璁ㄨ哄瓨鍌ㄧ粨鏋 鈶 鏁版嵁鐨勮繍綆 鍗沖規暟鎹鏂藉姞鐨勬搷浣 銆銆鏁版嵁鐨勮繍綆楀畾涔夊湪鏁版嵁鐨勯昏緫緇撴瀯涓 姣忕嶉昏緫緇撴瀯閮芥湁涓涓榪愮畻鐨勯泦鍚 鏈甯哥敤鐨勬緔 鎻掑叆 鍒犻櫎 鏇存柊 鎺掑簭絳夎繍綆楀疄闄呬笂鍙鏄鍦ㄦ娊璞$殑鏁版嵁涓婃墍鏂藉姞鐨勪竴緋誨垪鎶借薄鐨勬搷浣 銆銆鎵璋 鎶借薄鐨勬搷浣 鏄鎸囨垜浠鍙鐭ラ亾榪欎簺鎿嶄綔鏄 鍋氫粈涔 鑰屾棤欏昏冭檻 濡備綍鍋 鍙鏈夌『瀹氫簡瀛樺偍緇撴瀯涔嬪悗 鎵嶈冭檻濡備綍鍏蜂綋瀹炵幇榪欎簺榪愮畻 銆銆涓轟簡澧炲姞瀵規暟鎹緇撴瀯鐨勬劅鎬цよ瘑 涓嬮潰涓句緥鏉ヨ存槑鏈夊叧鏁版嵁緇撴瀯鐨勬傚康 銆愪緥 錛 銆 瀛︾敓鎴愮嘩琛 瑙佷笅琛
娉ㄦ剰 鍦ㄨ〃涓鎸囧嚭鏁版嵁鍏冪礌 鏁版嵁欏 寮濮嬬粨鐐瑰拰緇堢緇撶偣絳夋傚康
錛 錛夐昏緫緇撴瀯 銆銆琛ㄤ腑鐨勬瘡涓琛屾槸涓涓鏁版嵁鍏冪礌錛堟垨璁板綍 緇撶偣錛 瀹冪敱瀛﹀彿 濮撳悕 鍚勭戞垚緇╁強騫沖潎鎴愮嘩絳夋暟鎹欏圭粍鎴 琛ㄤ腑鏁版嵁鍏冪礌涔嬮棿鐨勯昏緫鍏崇郴鏄 瀵硅〃涓浠諱竴涓緇撶偣 涓庡畠鐩擱偦涓斿湪瀹冨墠闈㈢殑緇撶偣錛堜害縐頒負鐩存帴鍓嶈秼錛圛mmediate Predecessor錛夛級鏈澶氬彧鏈変竴涓 涓庤〃涓浠諱竴緇撶偣鐩擱偦涓斿湪鍏跺悗鐨勭粨鐐癸紙浜︾О涓虹洿鎺ュ悗緇э紙Immediate Successor錛夛級涔熸渶澶氬彧鏈変竴涓 琛ㄤ腑鍙鏈夌涓涓緇撶偣娌℃湁鐩存帴鍓嶈秼 鏁呯О涓哄紑濮嬬粨鐐 涔熷彧鏈夋渶鍚庝竴涓緇撶偣娌℃湁鐩存帴鍚庣戶 鏁呯О涔嬩負緇堢緇撶偣 渚嬪 琛ㄤ腑 椹浜 鎵鍦ㄧ粨鐐圭殑鐩存帴鍓嶈秼緇撶偣鍜岀洿鎺ュ悗緇х粨鐐瑰垎鍒鏄 涓佷竴 鍜 寮犱笁 鎵鍦ㄧ殑緇撶偣 涓婅堪緇撶偣闂寸殑鍏崇郴鏋勬垚浜嗚繖寮犲︾敓鎴愮嘩琛ㄧ殑閫昏緫緇撴瀯
錛 錛夊瓨鍌ㄧ粨鏋 銆銆璇ヨ〃鐨勫瓨鍌ㄧ粨鏋勬槸鎸囩敤璁$畻鏈鴻璦濡備綍琛ㄧず緇撶偣涔嬮棿鐨勮繖縐嶅叧緋 鍗寵〃涓鐨勭粨鐐規槸欏哄簭閭繪帴鍦板瓨鍌ㄥ湪涓鐗囪繛緇鐨勫崟鍏冧箣涓 榪樻槸鐢ㄦ寚閽堝皢榪欎簺緇撶偣閾炬帴鍦ㄤ竴璧鳳紵
錛 錛夋暟鎹鐨勮繍綆 銆銆鍦ㄤ笂闈㈢殑瀛︾敓鎴愮嘩琛ㄤ腑 鍙鑳借佺粡甯告煡鐪嬫煇涓瀛︾敓鐨勬垚緇 褰撳︾敓閫瀛︽椂瑕佸垹闄ょ浉搴旂殑緇撶偣 榪涙潵鏂板︾敓鏃惰佸炲姞緇撶偣 絀剁珶濡備綍榪涜屾煡鎵 鍒犻櫎 鎻掑叆 榪欏氨鏄鏁版嵁鐨勮繍綆楅棶棰 鎼炴竻妤氫簡涓婅堪涓変釜闂棰 涔熷氨寮勬竻浜嗗︾敓鎴愮嘩琛ㄨ繖涓鏁版嵁緇撴瀯
錛庢暟鎹鐨勯昏緫緇撴瀯鍒嗙被 銆銆鍦ㄤ笉浜х敓娣鋒穯鐨勫墠鎻愪笅 甯稿皢鏁版嵁鐨勯昏緫緇撴瀯綆縐頒負鏁版嵁緇撴瀯 鏁版嵁鐨勯昏緫緇撴瀯鏈変袱澶х被
錛 錛夌嚎鎬х粨鏋 銆銆綰挎х粨鏋勭殑閫昏緫鐗瑰緛鏄 鑻ョ粨鏋勬槸闈炵┖闆 鍒欐湁涓斾粎鏈変竴涓寮濮嬬粨鐐瑰拰涓涓緇堢緇撶偣 騫朵笖鎵鏈夌粨鐐歸兘鏈澶氬彧鏈変竴涓鐩存帴鍓嶈秼鍜屼竴涓鐩存帴鍚庣戶 銆銆綰挎ц〃鏄涓涓鍏稿瀷鐨勭嚎鎬х粨鏋 鏍 闃熷垪 涓茬瓑閮芥槸綰挎х粨鏋 錛 錛夐潪綰挎х粨鏋 銆銆闈炵嚎鎬х粨鏋勭殑閫昏緫鐗瑰緛鏄 涓涓緇撶偣鍙鑳芥湁澶氫釜鐩存帴鍓嶈秼鍜岀洿鎺ュ悗緇 鏁扮粍 騫誇箟琛 鏍戝拰鍥劇瓑鏁版嵁緇撴瀯閮芥槸闈炵嚎鎬х粨鏋
錛庢暟鎹鐨勫洓縐嶅熀鏈瀛樺偍鏂規硶 銆銆鏁版嵁鐨勫瓨鍌ㄧ粨鏋勫彲鐢ㄤ互涓嬪洓縐嶅熀鏈瀛樺偍鏂規硶寰楀埌 錛 錛夐『搴忓瓨鍌ㄦ柟娉 銆銆璇ユ柟娉曟妸閫昏緫涓婄浉閭葷殑緇撶偣瀛樺偍鍦ㄧ墿鐞嗕綅緗涓婄浉閭葷殑瀛樺偍鍗曞厓閲 緇撶偣闂寸殑閫昏緫鍏崇郴鐢卞瓨鍌ㄥ崟鍏冪殑閭繪帴鍏崇郴鏉ヤ綋鐜 銆銆鐢辨ゅ緱鍒扮殑瀛樺偍琛ㄧず縐頒負欏哄簭瀛樺偍緇撴瀯 錛圫equential Storage Structure錛 閫氬父鍊熷姪紼嬪簭璇璦鐨勬暟緇勬弿榪 銆銆璇ユ柟娉曚富瑕佸簲鐢ㄤ簬綰挎х殑鏁版嵁緇撴瀯 闈炵嚎鎬х殑鏁版嵁緇撴瀯涔熷彲閫氳繃鏌愮嶇嚎鎬у寲鐨勬柟娉曞疄鐜伴『搴忓瓨鍌 錛 錛夐摼鎺ュ瓨鍌ㄦ柟娉 銆銆璇ユ柟娉曚笉瑕佹眰閫昏緫涓婄浉閭葷殑緇撶偣鍦ㄧ墿鐞嗕綅緗涓婁害鐩擱偦 緇撶偣闂寸殑閫昏緫鍏崇郴鐢遍檮鍔犵殑鎸囬拡瀛楁佃〃紺 鐢辨ゅ緱鍒扮殑瀛樺偍琛ㄧず縐頒負閾懼紡瀛樺偍緇撴瀯錛圠inked Storage Structure錛 閫氬父鍊熷姪浜庣▼搴忚璦鐨勬寚閽堢被鍨嬫弿榪 錛 錛夌儲寮曞瓨鍌ㄦ柟娉 銆銆璇ユ柟娉曢氬父鍦ㄥ偍瀛樼粨鐐逛俊鎮鐨勫悓鏃 榪樺緩絝嬮檮鍔犵殑緔㈠紩琛 銆銆緔㈠紩琛ㄧ敱鑻ュ共緔㈠紩欏圭粍鎴 鑻ユ瘡涓緇撶偣鍦ㄧ儲寮曡〃涓閮芥湁涓涓緔㈠紩欏 鍒欒ョ儲寮曡〃縐頒箣涓虹犲瘑緔㈠紩錛圖ense Index錛 鑻ヤ竴緇勭粨鐐瑰湪緔㈠紩琛ㄤ腑鍙瀵瑰簲涓涓緔㈠紩欏 鍒欒ョ儲寮曡〃縐頒負紼鐤忕儲寮(Spare Index) 緔㈠紩欏圭殑涓鑸褰㈠紡鏄 (鍏抽敭瀛 鍦板潃)
鍏抽敭瀛楁槸鑳藉敮涓鏍囪瘑涓涓緇撶偣鐨勯偅浜涙暟鎹欏 紼犲瘑緔㈠紩涓緔㈠紩欏圭殑鍦板潃鎸囩ず緇撶偣鎵鍦ㄧ殑瀛樺偍浣嶇疆 紼鐤忕儲寮曚腑緔㈠紩欏圭殑鍦板潃鎸囩ず涓緇勭粨鐐圭殑璧峰嬪瓨鍌ㄤ綅緗 錛 錛夋暎鍒楀瓨鍌ㄦ柟娉 璇ユ柟娉曠殑鍩烘湰鎬濇兂鏄 鏍規嵁緇撶偣鐨勫叧閿瀛楃洿鎺ヨ$畻鍑鴻ョ粨鐐圭殑瀛樺偍鍦板潃 鍥涚嶅熀鏈瀛樺偍鏂規硶 鏃㈠彲鍗曠嫭浣跨敤 涔熷彲緇勫悎璧鋒潵瀵規暟鎹緇撴瀯榪涜屽瓨鍌ㄦ槧鍍 鍚屼竴閫昏緫緇撴瀯閲囩敤涓嶅悓鐨勫瓨鍌ㄦ柟娉 鍙浠ュ緱鍒頒笉鍚岀殑瀛樺偍緇撴瀯 閫夋嫨浣曠嶅瓨鍌ㄧ粨鏋勬潵琛ㄧず鐩稿簲鐨勯昏緫緇撴瀯 瑙嗗叿浣撹佹眰鑰屽畾 涓昏佽冭檻榪愮畻鏂逛究鍙婄畻娉曠殑鏃剁┖瑕佹眰
錛庢暟鎹緇撴瀯涓夋柟闈㈢殑鍏崇郴 銆銆鏁版嵁鐨勯昏緫緇撴瀯 鏁版嵁鐨勫瓨鍌ㄧ粨鏋勫強鏁版嵁鐨勮繍綆楄繖涓夋柟闈㈡槸涓涓鏁翠綋 瀛ょ珛鍦板幓鐞嗚В涓涓鏂歸潰 鑰屼笉娉ㄦ剰瀹冧滑涔嬮棿鐨勮仈緋繪槸涓嶅彲鍙栫殑 銆銆瀛樺偍緇撴瀯鏄鏁版嵁緇撴瀯涓嶅彲緙哄皯鐨勪竴涓鏂歸潰 鍚屼竴閫昏緫緇撴瀯鐨勪笉鍚屽瓨鍌ㄧ粨鏋勫彲鍐犱互涓嶅悓鐨勬暟鎹緇撴瀯鍚嶇О鏉ユ爣璇 銆銆銆愪緥銆戠嚎鎬ц〃鏄涓縐嶉昏緫緇撴瀯 鑻ラ噰鐢ㄩ『搴忔柟娉曠殑瀛樺偍琛ㄧず 鍙縐板叾涓洪『搴忚〃 鑻ラ噰鐢ㄩ摼寮忓瓨鍌ㄦ柟娉 鍒欏彲縐板叾涓洪摼琛 鑻ラ噰鐢ㄦ暎鍒楀瓨鍌ㄦ柟娉 鍒欏彲縐頒負鏁e垪琛 銆銆鏁版嵁鐨勮繍綆椾篃鏄鏁版嵁緇撴瀯涓嶅彲鍒嗗壊鐨勪竴涓鏂歸潰 鍦ㄧ粰瀹氫簡鏁版嵁鐨勯昏緫緇撴瀯鍜屽瓨鍌ㄧ粨鏋勪箣鍚 鎸夊畾涔夌殑榪愮畻闆嗗悎鍙婂叾榪愮畻鐨勬ц川涓嶅悓 涔熷彲鑳藉艱嚧瀹屽叏涓嶅悓鐨勬暟鎹緇撴瀯 銆銆銆愪緥銆戣嫢瀵圭嚎鎬ц〃涓婄殑鎻掑叆 鍒犻櫎榪愮畻闄愬埗鍦ㄨ〃鐨勪竴絝榪涜 鍒欒ョ嚎鎬ц〃縐頒箣涓烘爤 鑻ュ規彃鍏ラ檺鍒跺湪琛ㄧ殑涓絝榪涜 鑰屽垹闄ら檺鍒跺湪琛ㄧ殑鍙︿竴絝榪涜 鍒欒ョ嚎鎬ц〃縐頒箣涓洪槦鍒 鏇磋繘涓姝 鑻ョ嚎鎬ц〃閲囩敤欏哄簭琛ㄦ垨閾捐〃浣滀負瀛樺偍緇撴瀯 鍒欏規彃鍏ュ拰鍒犻櫎榪愮畻鍋氫簡涓婅堪闄愬埗涔嬪悗 鍙鍒嗗埆寰楀埌欏哄簭鏍堟垨閾炬爤 欏哄簭闃熷垪鎴栭摼闃熷垪
鏁版嵁綾誨瀷錛圖ata Type錛
銆銆鎵璋撴暟鎹綾誨瀷鏄涓涓鍊肩殑闆嗗悎浠ュ強鍦ㄨ繖浜涘間笂瀹氫箟鐨勪竴緇勬搷浣滅殑鎬葷О 閫氬父鏁版嵁綾誨瀷鍙浠ョ湅浣滄槸紼嬪簭璁捐¤璦涓宸插疄鐜扮殑鏁版嵁緇撴瀯 銆愪緥 錛 銆慍璇璦鐨 鏁存暟綾誨瀷 灝卞畾涔変簡涓涓鏁存暟鍙鍙栧肩殑鑼冨洿錛堝叾鏈澶у糏NT MAX渚濊禆浜庡叿浣撴満鍣錛変互鍙婂規暣鏁板彲鏂藉姞鐨勫姞 鍑 涔 闄ゅ拰鍙栨ā絳夋搷浣 銆銆鎸 鍊 鏄鍚﹀彲鍒嗚В 鍙灝嗘暟鎹綾誨瀷鍒掑垎涓轟袱綾 鈶犲師瀛愮被鍨 鍏跺間笉鍙鍒嗚В 閫氬父鏄鐢辮璦鐩存帴鎻愪緵 銆銆銆愪緥銆慍璇璦鐨勬暣鍨 瀛楃﹀瀷絳夋爣鍑嗙被鍨嬪強鎸囬拡絳夌畝鍗曠殑瀵煎嚭綾誨瀷 鈶$粨鏋勭被鍨 鍏跺煎彲鍒嗚В涓鴻嫢騫蹭釜鎴愬垎錛堟垨縐頒負鍒嗛噺錛 鏄鐢ㄦ埛鍊熷姪浜庤璦鎻愪緵鐨勬弿榪版満鍒惰嚜宸卞畾涔夌殑 瀹冮氬父鏄鐢辨爣鍑嗙被鍨嬫淳鐢熺殑 鏁呭畠涔熸槸涓縐嶅煎嚭綾誨瀷 銆銆銆愪緥銆慍鐨勬暟緇 緇撴瀯絳夌被鍨
鎶借薄鏁版嵁綾誨瀷錛圓bstract Type綆縐癆DT錛 銆銆ADT鏄鎸囨娊璞℃暟鎹鐨勭粍緇囧拰涓庝箣鐩稿叧鐨勬搷浣 鍙浠ョ湅浣滄槸鏁版嵁鐨勯昏緫緇撴瀯鍙婂叾鍦ㄩ昏緫緇撴瀯涓婂畾涔夌殑鎿嶄綔
涓涓獮DT鍙鎻忚堪涓 ADT ADT Name{ Data://鏁版嵁璇存槑 鏁版嵁鍏冪礌涔嬮棿閫昏緫鍏崇郴鐨勬弿榪 Operations://鎿嶄綔璇存槑 Operation ://鎿嶄綔 瀹冮氬父鍙鐢–鎴朇錒錒㈢殑鍑芥暟鍘熷瀷鏉ユ弿榪 Input:瀵硅緭鍏ユ暟鎹鐨勮存槑 Preconditions:鎵ц屾湰鎿嶄綔鍓嶇郴緇熷簲婊¤凍鐨勭姸鎬//鍙鐪嬩綔鍒濆嬫潯浠 Process:瀵規暟鎹鎵ц岀殑鎿嶄綔 Output:瀵硅繑鍥炴暟鎹鐨勮存槑 Postconditions:鎵ц屾湰鎿嶄綔鍚庣郴緇熺殑鐘舵// 緋葷粺 鍙鐪嬩綔鏌愪釜鏁版嵁緇撴瀯 Operation ://鎿嶄綔 鈥︹ }//ADT
⑥ 數據結構的三要素是什麼
一、數據的邏輯結構
指反映數據元素之間的邏輯關系的數據結構,其中的邏輯關系是指數據元素之間的前後間關系,而與他們在計算機中的存儲位置無關。邏輯結構包括:
1、集合:數據結構中的元素之間除了「同屬一個集合」 的相互關系外,別無其他關系;
2、線性結構:數據結構中的元素存在一對一的相互關系;
3、樹形結構:數據結構中的元素存在一對多的相互關系;
4、圖形結構:數據結構中的元素存在多對多的相互關系。
二、數據的物理結構
指數據的邏輯結構在計算機存儲空間的存放形式。
數據的物理結構是數據結構在計算機中的表示(又稱映像),它包括數據元素的機內表示和關系的機內表示。由於具體實現的方法有順序、鏈接、索引、散列等多種,所以,一種數據結構可表示成一種或多種存儲結構。
數據元素的機內表示(映像方法): 用二進制位(bit)的位串表示數據元素。通常稱這種位串為節點(node)。當數據元素有若干個數據項組成時,位串中與各個數據項對應的子位串稱為數據域(data field)。因此,節點是數據元素的機內表示(或機內映像)。
關系的機內表示(映像方法):數據元素之間的關系的機內表示可以分為順序映像和非順序映像,常用兩種存儲結構:
順序存儲結構和鏈式存儲結構。順序映像藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關系。非順序映像藉助指示元素存儲位置的指針(pointer)來表示數據元素之間的邏輯關系。
三、數據存儲結構
數據的邏輯結構在計算機存儲空間中的存放形式稱為數據的物理結構(也稱為存儲結構)。一般來說,一種數據結構的邏輯結構根據需要可以表示成多種存儲結構,常用的存儲結構有順序存儲、鏈式存儲、索引存儲和哈希存儲等。
數據的順序存儲結構的特點是:藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關系;非順序存儲的特點是:藉助指示元素存儲地址的指針表示數據元素之間的邏輯關系。
(6)存儲結構中定義一個集合擴展閱讀
在程序中,堆用於動態分配和釋放程序所使用的對象。在以下情況中調用堆操作:
1、事先不知道程序所需對象的數量和大小。
2、對象太大,不適合使用堆棧分配器。
堆使用運行期間分配給代碼和堆棧以外的部分內存。
傳統上,操作系統和運行時庫隨附了堆實現。當進程開始時,操作系統創建稱為進程堆的默認堆。如果沒有使用其他堆,則使用進程堆分配塊。語言運行時庫也可在一個進程內創建單獨的堆。(例如,C 運行時庫創建自己的堆。)
除這些專用堆外,應用程序或許多載入的動態鏈接庫 (DLL) 之一也可以創建並使用單獨的堆。Win32 提供了一組豐富的API用於創建和使用專用堆。有關堆函數的優秀教程,請參閱 MSDN 平台 SDK 節點。
當應用程序或DLL創建專用堆時,這些堆駐留於進程空間中並且在進程范圍內是可訪問的。某一給定堆分配的任何數據應為同一堆所釋放。(從一個堆分配並釋放給另一個堆沒有意義。)
在所有虛擬內存系統中,堆位於操作系統的虛擬內存管理器之上。語言運行時堆也駐留在虛擬內存之上。某些情況下,這些堆在操作系統堆的上層,但語言運行時堆通過分配大的塊來執行自己的內存管理。繞開操作系統堆來使用虛擬內存函數可使堆更好地分配和使用塊。
典型的堆實現由前端分配器和後端分配器組成。前端分配器維護固定大小塊的自由列表。當堆收到分配調用後,它嘗試從前端列表中查找自由塊。如果此操作失敗,則堆將被迫從後端(保留和提交虛擬內存)分配一個大塊來滿足請求。通常的實現具有每個塊分配的開銷,這花費了執行周期,也減少了可用存儲區。
Windows NT的實現(Windows NT 4.0 版及更高版本)使用 127 個從 8 到 1,024 位元組不等的 8 位元組對齊塊的自由列表和 1 個混合列表。混合列表(自由列表【0】)包含大小超過 1,024 位元組的塊。自由列表包含在雙向鏈接表中鏈接在一起的對象。默認情況下,進程堆執行合並操作。(合並操作是組合相鄰的自由塊以生成更大的塊的操作。)合並操作花費了額外的周期,但減少了堆塊的內部碎片。
單個全局鎖可防止多線程同時使用堆。此鎖主要用於保護堆數據結構不受多線程的任意訪問。當堆操作過於頻繁時,此鎖會對性能造成負面影響。
參考資料來源:網路-數據結構
參考資料來源:網路-堆