有關說明
線性表就是零個或多個相同元素的有限序列。
乙個長度為n(n>=0)的線性表可以表示為:
l=(a0,a1,……ai-1,ai,ai+1……an)
序列:元素和元素之間有著前後之分。其中ai+1 稱作ai的後繼,ai-1稱作ai的前驅。
有限:線性表的長度必須是有限長的(計算機所能處理的資料必須是有限的)。
相同元素:簡單來說表中的元素的資料型別必須是一致的。
零個:表中可以沒有元素,即表是空表的情況下,表也是存在的。
根據儲存方式的不同,可以分為順序表和煉表。
順序表:將線性表中的元素按照順序儲存的方式儲存於一片連續的儲存空間中。(採用陣列的形式實現)
鍊錶:線性表採用鏈式儲存結構的方式儲存。(可分為單鏈表、雙鏈表、迴圈鍊錶等)
(1)線性表的表頭無前驅(非空表);
(2)線性表的表尾,無後繼;
(3)除了表頭和表尾,其它每個元素只有乙個直接前驅和乙個直接後繼。
順序表
#define maxlen 100
//採用巨集定義設定表的長度
typedef
int data_ty;
// 對錶中元素資料型別進行重新命名,便於復用
typedef
struct sequence_list
seqlist,
*seqlist_p;
目的為了開闢一段表的儲存空間,此時表為空,因此表中最後乙個元素位置設為-1;
bool seqlist_create
(seqlist_p *p)
(*p)
->tail =-1
;//規定當尾部元素位置為-1,即表為空
return true;
}
這裡僅僅是拋棄表中的元素,相當於恢復到空表(表依然存在)
void
seqlist_clear
(seqlist_p p)
當表尾元素的位置等於-1,即為空表
bool seqlist_empty
(seqlist_p p)
當表尾元素的位置等於表的長度減一,即為滿表
bool seqlist_full
(seqlist_p p)
這裡的位置pos與存放表的陣列的下標等價
bool seqlist_out_pos
(seqlist_p p,
int pos,data_ty *d)
*d = p->data[pos]
;return true;
}
int
seqlist_find
(seqlist_p p,data_ty da)}}
return-1
;}
bool seqlist_in
(seqlist_p p,data_ty da)
(p->tail)
= p->tail +1;
p->data[p->tail]
= da;
return true;
}
void
seqlist_free
(seqlist_p p)
void
seqlist_delete
(seqlist_p p,
int pos)
for(i = pos; i < p->tail; i++
) p->tail = p->tail -1;
}
設存在順序表l,長度為n;採用冒泡法實現:
void
seqlist_bubble_sort
(seqlist_p p)
for(i =
0; i < p->tail - i; i++)}
}}
所有解釋和實現均基於c語言基礎之上。另外,上述運算只是一些基本的運算,其它運算都可以通過基本運算組合得到。
例如:刪除重複元素=確定某元素位置+刪除
有序插入=插入+排序(當然也有其它方式)
資料結構 線性表 順序表
豐富了前邊的功能,更加完善。include include define list init size 100 線性表儲存空間的初始分配量 define listincrement 10 線性表儲存空間的分配增量 using namespace std const int overflow 2 ty...
資料結構 線性表 順序表
線性表是具有相同特性的資料元素的乙個有限序列。線性表的順序儲存結構是,把線性表中的所有元素按照其邏輯順序依次儲存到從計算機儲存器中指定的儲存位置開始的一塊連續的儲存空間。include include include define maxsize 50 using namespace std 假設l...
資料結構 線性表(順序表)
順序表就是把線性表中的所有元素按照其邏輯順序,依次儲存到從指定的儲存位置開始的一塊連續的儲存空間中。這樣線性表中第乙個元素的儲存位置就是指定的儲存位置,第i 1個元素的儲存位置緊接在第i個元素的儲存位置的後面。順序表就像如下圖中的房子,每個房間左邊的數字就是該房間離0點的距離,同時也代表了房間號,房...