二、線性表的順序儲存
三、配套實驗
線性表是具有相同資料型別的n(n>= 0)個資料元素的有限序列。
(1)簡單的線性表。例如,26個英文本母表;一周七天。
(2)複雜的線性表。例如,學生資訊登記表。
在複雜的線性表,常把資料元素稱為記錄(record),它由若干個資料項(item)組成,而含有大量記錄的線性表又稱為檔案(file)。
(1)有且僅有乙個開始結點,它沒有直接前驅。
(2)有且僅有乙個終端結點,它沒有直接後繼。
(3)除了開始結點和終端結點外,其餘的結點都有且僅有乙個直接前驅和乙個直接後繼。
資料結構在記憶體中的表示通常有兩種形式,即順序儲存表示和鏈式儲存表示。線性表的順序儲存是指用一組位址連續的儲存單位依次儲存線性表的資料元素,我們把用這種儲存形式儲存的線性表稱為順序表。線性表的順序儲存表示又稱為順序表。順序表的邏輯順序和物理順序是一致的。
(1)順序表的邏輯順序和物理順序是一致的。
(2)順序表中任意乙個資料元素都可以隨機訪問,所以順序表是一種隨機訪問的儲存結構。
typedef
int datafype;
//建立線性表
typedef
struct
seqlist;
seqlist l;
順序表seqlist是乙個結構體型別,它由兩個成員組成:data表示儲存順序表的陣列,其長度maxlen表示順序表中元素數目的最大值;length表示順序表的實際長度。
(1)順序表的初始化
int
initlist
(seqlist *l)
(2)順序表的建立
void
createlist
(seqlist *l,
int n)
l->length=i;
}
(3)查詢操作(按位置查詢)
int
getelem
(seqlist *l,
int i,datafype *e)
(4)查詢操作(按值查詢)
int
locateelem
(seqlist *l,datafype e)
return no;
}/*int locateelem(seqlist *l,datafype e)else
}}*/
(5)插入查詢
int
inselem
(seqlist *l ,
int i,datafype e)
if(i<
1||i>l->length+1)
if(i==l->length+1)
l->data[j+1]
=l->data[j]
; l->data[i-1]
=e; l->length++
;return ok;
}}
(6)刪除操作
int
delelem
(seqlist *l,
int i,datafype *e)
if(i<
1||i>l-
>length)
*e=l-
>data[i-1]
; l-
>data[i-1]
=l->data[j]
; l-
>length--
;return ok;
}}
(6)輸出表中元素操作
void
displist
(seqlist *l)
}
(7)顯示選單函式
void
menu()
實驗:順序表表子系統
(1)掌握線性表的特點及其儲存的方式。
(2)掌握線性表順序儲存的基本運算。
(3)掌握線性表的建立、插入、刪除和顯示線性表中元素等的基本操作。
#define max 100
#define ok 1
#define no -1
#include
#include
typedef
int datafype;
//建立線性表
typedef
struct
seqlist;
seqlist l;
intinitlist
(seqlist *l)
void
createlist
(seqlist *l,
int n)
l->length=i;
}int
destorylist
(seqlist *l)
intclearlist
(seqlist *l)
intgetlength
(seqlist *l)
intisempty
(seqlist *l)
intgetelem
(seqlist *l,
int i,datafype *e)
intlocateelem
(seqlist *l,datafype e)
return no;
}/*int locateelem(seqlist *l,datafype e)else
}}*/
intinselem
(seqlist *l ,
int i,datafype e)
if(i<
1||i>l->length+1)
if(i==l->length+1)
l->data[j+1]
=l->data[j]
; l->data[i-1]
=e; l->length++
;return ok;}}
intdelelem
(seqlist *l,
int i,datafype *e)
if(i<
1||i>l->length)
*e=l->data[i-1]
; l->data[i-1]
=l->data[j]
; l->length--
;return ok;}}
void
displist
(seqlist *l)
}void
menu()
intmain()
else
break
;case
'3':
printf
("這線性表長度為:%d"
,getlength
(&l));
break
;case
'4':
printf
("輸入要插入的位置:");
scanf
("%d"
,&i)
;printf
("請輸入要插入的元素值:");
scanf
("%d"
,&e);if
(inselem
(&l,i,e)
>0)
else
break
;case
'5':
printf
("輸入要刪除的位置:");
scanf
("%d"
,&i);if
(delelem
(&l,i,
&e)>0)
else
break
;case
'6':
printf
("輸入要查詢的元素位置(從1開始):");
scanf
("%d"
,&i);if
(getelem
(&l,i,
&e)>0)
else
break
;case
'7':
printf
("輸入要查詢的元素值:");
scanf
("%d"
,&i)
; loc=
locateelem
(&l,e);if
(loc)
else
break
;case
'8':if(
clearlist
(&l)
>0)
else
break
;case
'9':if(
destorylist
(&l)
>0)
else
break
;case
'0':
ch1=
'n';
break
;default
:printf
("輸入錯誤!!請輸入0~9進行選擇!");
}if(ch2!=
'0')}}
}
資料結構(C語言版) 線性表
1 線性結構的特點 1 存在唯一乙個被稱作 第乙個 的資料元素。2 存在唯一乙個被稱作 最後乙個 的資料元素。3 除第乙個元素之外,每個資料元素均只有乙個前驅。4 除最後乙個元素之外,每個資料元素均只有乙個後繼。2 線性表 n個資料元素的有限序列,是一種邏輯結構。1 同一線性表中的元素具有相同的性質...
線性表c語言版
定義 線性表 零個或多個資料元素的有限序列。首先,他是乙個序列,元素之間是有順序的,若存在多個元素,則第乙個無前驅,最後乙個無後繼,其他元素每個元素都有且只有乙個前驅和後繼。然後,線性表強調是有限的,元素的個數是有限的。線性表元素的個數n n 0 定義為線性表的長度,當n 0時,稱為空表。在複雜的線...
資料結構(C語言)線性表(順序表)
首先線性表的基本函式 1.initlist l 建立乙個空的線性表l 2.destorylist l 如果線性表已經存在的話,則銷毀線性表l 3.listlength l 返回線性表的元素個數 4.getlist l,i e 用e返回線性表第i個元素的值 5.locateelem l,e compa...