c語言資料結構之線性表的順序儲存結構

2022-09-03 18:27:07 字數 4075 閱讀 2156

線性表,即線性儲存結構,將具有「一對一」關係的資料「線性」地儲存到物理空間中,這種儲存結構就稱為線性儲存結構,簡稱線性表。

注意:使用線性表儲存的資料,要求資料型別必須一致,線性表儲存的資料,要麼全不都是整形,要麼全部都是字串。一半是整形,另一半是字串的一組資料無法使用線性表儲存。

線性表儲存資料可以分為:

順序儲存結構和鏈式儲存結構

資料結構中,一組資料中的某一元素的左側相鄰元素稱為「直接前驅」,位於此元素左側的所有元素都統稱為「前驅元素」;某一元素的右側相鄰元素稱為「直接後繼」,位於此元素右側的所有元素都統稱為「後繼元素」;

先介紹順序表

順序表全名順序儲存結構,順序表儲存資料時,會提前申請一整塊足夠大小的物理空間,然後將資料依次儲存起來,儲存時做到資料元素之間是不間斷的。

順序表的初始化

順序表除了要申請足夠大小的物理空間還需要申請順序表的儲存容量,順序表的長

度,也就是順序表中元素的個數。

注意:順序表申請的儲存容量要大於順序表的長度。

首先我們得自定義順序表

1 typedef struct

seqlistsqlt;

接著初始化順序表的主要工作:

給 head 動態資料申請足夠大小的物理空間

給 size 和 length 賦初值

1

#define size 5

2sqlt init_seqlist()

11 s.length=0;//

空表的長度初始化為0

12 s.size=size;//

空表的初始儲存空間為size

13return

s;14 }

順序表插入元素

通過遍歷,找到資料元素要插入的位置

將要插入位置元素以及後續的元素整體向後移動乙個位置;

將元素放到騰出來的位置上

1

//插入函式,其中,elem為插入的元素,p為插入到順序表的位置

2 sqlt insert_seqlist(sqlt s,int elem,intp)3

9//做插入操作時,首先需要看順序表是否有多餘的儲存空間提供給插入的元素,如果沒有,需要申請

10if(s.length>=s.size)15}

16//

插入操作,需要將從插入位置開始的後續元素,逐個後移

17for(int i=s.length-1;i>=p-1;i--)

20//

後移完成後,直接將所需插入元素,新增到順序表的相應位置

21 s.head[p-1]=elem;

22 s.length++;//

由於新增了元素,所以長度+1

23return

s;24 }

順序表刪除元素

只需找到目標元素,並將其後續所有元素整體前移 1 個位置即可。(後續元素整體前移乙個位置,會直接將目標元素刪除,可間接實現刪除元素的目的。)

1 sqlt del_seqlist(sqlt s,intp)6

//刪除操作

7for(int i=p;i)

10 s.length--;//

刪除乙個元素表的長度要減1

11return

s;12 }

順序表查詢元素

在這裡只選擇簡單的順序查詢演算法

1

//查詢函式,其中,elem表示要查詢的資料元素的值

2int select_seqlist(sqlt s, int

elem)7}

8return -1;//

如果查詢失敗,返回-1

9 }

順序表更改元素

找到目標元素;

直接修改該元素的值;

1

//更改函式,其中,elem為要更改的元素,newelem為新的資料元素

2 sqlt amend_seqlist(sqlt s, int elem, int

newelem)

以下實現增刪改查的整體順序儲存結構線性表

1 #include 2 #include 3

4#define size 5

5 typedef struct

seqlistsqlt;

10sqlt init_seqlist()

19 s.length=0;//

空表的長度初始化為0

20 s.size=size;//

空表的初始儲存空間為size

21return

s;22}23

//插入函式,其中,elem為插入的元素,p為插入到順序表的位置

24 sqlt insert_seqlist(sqlt s,int elem,int

p)25

31//

做插入操作時,首先需要看順序表是否有多餘的儲存空間提供給插入的元素,如果沒有,需要申請

32if(s.length>=s.size)37}

38//

插入操作,需要將從插入位置開始的後續元素,逐個後移

39for(int i=s.length-1;i>=p-1;i--)

42//

後移完成後,直接將所需插入元素,新增到順序表的相應位置

43 s.head[p-1]=elem;

44 s.length++;//

由於新增了元素,所以長度+1

45return

s;46

}47 sqlt del_seqlist(sqlt s,int

p)52

//刪除操作

53for(int i=p;i)

56 s.length--;//

刪除乙個元素表的長度要減1

57return

s;58}59

//查詢函式,其中,elem表示要查詢的資料元素的值

60int select_seqlist(sqlt s, int

elem)65}

66return -1;//

如果查詢失敗,返回-167}

68//

更改函式,其中,elem為要更改的元素,newelem為新的資料元素

69 sqlt amend_seqlist(sqlt s, int elem, int

newelem)

75//

輸出順序表中元素的函式

76void

display_seqlist(sqlt s)

80 printf("\n"

);81}82

83int

main()

90 printf("

原順序表:\n");

91display_seqlist(s1);

9293 printf("

刪除元素2:\n");

94 s1=del_seqlist(s1,2

);95

display_seqlist(s1);

9697 printf("

在第3的位置插入元素5:\n");

98 s1=insert_seqlist(s1,5,3

);99 s1=insert_seqlist(s1,5,3

);100 s1=insert_seqlist(s1,5,3

);101 s1=insert_seqlist(s1,5,3

);102

display_seqlist(s1);

103104 printf("

查詢元素3的位置:\n");

105int p=select_seqlist(s1,3

);106 printf("

%d\n

",p);

107108 printf("

將元素3改為6:\n");

109 s1=amend_seqlist(s1,3,6

);110

display_seqlist(s1);

111return0;

112 }

資料結構(C語言)線性表(順序表)

首先線性表的基本函式 1.initlist l 建立乙個空的線性表l 2.destorylist l 如果線性表已經存在的話,則銷毀線性表l 3.listlength l 返回線性表的元素個數 4.getlist l,i e 用e返回線性表第i個元素的值 5.locateelem l,e compa...

資料結構 C語言線性表 順序表

線性表是最常用且最簡單的一種資料結構。簡言之,乙個線性表是n個資料元素的有限序列。在資料元素的非空有限集合中 存在唯一的乙個被稱做 第乙個 的資料元素 存在唯一的乙個被稱做 最後乙個 的資料元素 除第乙個之外,集合中的每個資料元素均只有乙個前驅 除最後乙個之外,集合中每個資料元素均只有乙個後繼 in...

C 資料結構 線性表之順序表

1 順序表 adt status initlist seqlist l 初始化順序表 void printlist seqlist l 遍歷順序表 int listlength seqlist l 獲得表長 status getelement seqlist l,int i,elementtype ...