線性表
順序表:
線性表的順序儲存結構成為順序表。一般用陣列來完成定義,儲存值以及線性關係。
陣列實現線性表,也就是把線性表中相鄰的元素儲存在陣列中相鄰的位置,從而導致了資料元素的序號和存放它的陣列下表之間具有一一對應的關係。
作用:線性表中在邏輯結構上相鄰的資料元素儲存在相鄰的物理儲存單元中,即通過資料元素物理儲存的相鄰關係來反映資料元素之間邏輯上的相鄰關係。
順序儲存的實現:一維陣列儲存順序表中的資料
順序表實現的主體結構:
const int maxsize=100;
template
class seqlist // 析構函式為空
int length ( ) // 求線性表的長度
t get ( int i ); // 按位查詢,取線性表的第 i 個元素
int locate ( t x ) ; // 按值查詢,求線性表中值為 x 的元素序號
t delete ( int i ) ; // 刪除線性表的第 i 個元素
void printlist ( ) ; // 遍歷線性表,按序號依次輸出各元素
};鏈式儲存結構以及實現:
特點:根據線性表的長度動態的申請儲存空間,以解決順序儲存中存在的儲存空間難以確定的問題。變數的三要素:名字,記憶體位址,值。變數的左值,右值。左值指變數的記憶體位址
右值:值。在賦值表示式中,賦值號左邊需要左值,右邊需要右值;如a=a+100 。指標變數:指標變數的右值本身又是乙個左值。
單鏈表的定義,採用c++模板:
template
struct node
;template
class linklist //建立空;
linklist ( t a[ ], int n ) ; //建立單鏈表
~linklist ( ) ;析構函式,用於清空記憶體
int length ( ) ;//得到單鏈表長度
t get ( int i ) ; //用值查詢位置
int locate ( t x ) ;//用位置查詢值
void insert ( int i, t x ) ;//建立沒有頭指標的單鏈表
t delete ( int i ) ; //刪除其中值
void printlist ( ) ; //遍歷
private:
node*first; // 單鏈表的頭指標 , 可以省略
};template
linklist:: linklist(t a[ ], int n)
}template
linklist:: linklist(t a[ ], int n)
r->next=null; //單鏈表建立完畢,將終端結點的指標域置空
}template
linklist:: printlist()
}頭插法:
}尾插法:
node*r;
head=null;
if(n<=0)return;
s=new node;
s->data=a[0];
s->next=head;
head=s;
r=head;
for(int i=1;is=new node;
s->data=a[i];
r->next=s;
r=s;
}template
t linklist::get(int i)
if (!p) throw "位置";
else return p->data;
}template
t linklist::get(int i)
if (!p) throw "位置";
else return p->data;
}template
void linklist::insert(int i, t x)
if (!p) throw "位置";
else
}不帶頭結點的單鏈表中插入結點
insert(int i, t x)
p=first ; j=1; //工作指標p初始化
while (p && jp=p->next; //工作指標p後移
j++;
}if (!p) throw "位置";
else
}template
t linklist::delete(int i)
if (!p || !p->next) throw "位置"; //結點p不存在或結點p的後繼結點不存在
else
}template
linklist:: ~linklist()
}迴圈鍊錶的定義
將單鏈表或者雙鏈表的頭尾結點鏈結起來,就是乙個迴圈鍊錶。
不增加額外儲存花銷,卻給不少操作帶來了方便
從迴圈表中任一結點出發,都能訪問到表中其他結點。
template
struct node
;template
class cyclelinklist;
//尾插法構造迴圈鍊錶
template
cyclelinklist:: cyclelinklist( )
template
cyclelinklist:: cyclelinklist(t a[ ], int n)
r->next=first; //單鏈表建立完畢,將終端結點的指標域指向頭結點
}頭插法構造迴圈鍊錶
template
cyclelinklist:: cyclelinklist(t a[ ], int n,int k)
將非迴圈的單鏈表改造成迴圈的單鏈表
p=first;
while(p->next)
p->next=first
}
資料結構 順序表 單鏈表的 比較 總結
優缺點文字部分 順序表和煉表de優缺點 順序表的優點 方法簡單,各種高階語言中都有陣列,容易實現。不用為表示結點間的邏輯關係而增加額外的儲存開銷 鍊錶要增加額外的指標域 順序表具有按元素序號隨機訪問的特點。缺點在順序表中做插入刪除操作時,平均移動大約表中一般的元素,因此對n較大的順序表效率低。需要預...
資料結構 鍊錶 單鏈表
陣列作為資料儲存結構有一定缺陷。無序陣列搜尋低效,有序陣列插入低效 無論哪種陣列,刪除低效 大小固定,無法所以改變。但是陣列的優勢是通過下標隨機訪問各個資料。鍊錶可以取代陣列作為儲存資料的基礎,比如棧,佇列。鍊錶分類 單鏈表 雙端鍊錶 有序鍊錶 雙向鍊錶 有迭代器的鍊錶 迭代器是用來隨機訪問鍊錶元素...
資料結構 鍊錶(單鏈表)
頭指標與頭結點不同,頭結點即第乙個結點,頭指標是指向第乙個結點的指標。鍊錶中可以沒有頭結點,但不能沒有頭指標。include using namespace std struct node node int d class list void insert int d void print node...