C語言數據結構之順序表


線性表是最常用且最簡單的一種數據結構。一個線性表是n個數據元素的有限序列,序列中的每個數據元素,可以是一個數字,可以是一個字符,也可以是復雜的結 構體或對象。例如:1,2,3,4,5是一個線性表,A,B,C,D...Z是一個線性表,一列列車的車廂1,車廂2...車廂n是一個線性表。

線性表的機內表示法(又稱存儲結構)有2種,一種是順序存儲結構,另一種是鏈式存儲結構。

順序存儲結構,顧名思義就是按順序來存儲的一種存儲結構,比如線性表(1,2,3,4,5),共計5個元素,

每個int型的數據元素假設占用4個存儲單元,假設第1個元素數字1的存儲地址是1000,則第2個元素數字2的存儲地址是1004,第3個元 素數字3的存儲地址是1008,依此類推,第n個數據元素的存儲地址是LOC(an) = LOC(a1)+(n-1)k.(k表示每個數據元素占用的存儲單元的長度)

顯而易見,這種存儲結構,相鄰元素在物理位置上也相鄰。

通常,我們把采用這種存儲結構的線性表稱為“順序表”。

有了基本的概念之后,我們就可以使用編程語言進行描述,使用C、C++、C#、Java等都可以,這篇文章我使用C語言描述。

一、順序表

先定義好線性表,然后就可以對它進行操作了,常見的線性表的基本操作有:創建線性表、查找元素、插入元素、刪除元素、清空、歸並等。

下面我會貼出代碼,歡迎大家一起學習交流!

推薦下我自己的C/C++學習裙:231-662-552,不管你是小白還是大牛,小編我都挺歡迎,不定期分享干貨,包括我自己整理的一份2018最新的C/C++資料和零基礎入門教程,歡迎初學和進階中的小伙伴。

 1 #define MAX_SIZE 20
 2 
 3 int arr[MAX_SIZE] = { 0 };
 4 
 5 int size = 0;//有效元素個數
 6 
 7 //標識符
 8 
 9 void arr_init()
10 
11 {
12 for (int i = 0; i < 10; i++)
13 {
14 arr[i] = -1;
15 }
16 }
17 //賦值
18 
19 void assignment()
20 {
21 for (int i = 0; i < 10; i++)
22 {
23 arr[i] = i;
24 size++;
25 }
26 }

 1 //輸出
 2 
 3 void arr_show()
 4 
 5 {
 6 for (int i = 0; i < size; i++)
 7 {
 8 printf("%d ", arr[i]);
 9 }
10 printf(" ");
11 }
12 //插入數據
13 
14 int arr_add(int n,int data)
15 {
16 if (n>size&&n <MAX_SIZE)
17 {
18 printf("添加失敗,插入位置偏大!");
19 return 0;
20 }
21 
22 if (n >= MAX_SIZE)
23 {
24 printf("添加失敗,數組越界!");
25 return 0;
26 }
27 
28 for (int i = size; i > n; i--)
29 {
30 arr[i] = arr[i-1];
31 }
32 
33 arr[n] = data;
34 size = size + 1;
35 return 1;
36 }

 1 /刪除元素
 2 
 3 int arr_del(int n)
 4 {
 5 if (n > size&&n<MAX_SIZE)
 6 {
 7 printf("下表偏大,此位置無元素! ");
 8 return 0;
 9 }
10 if (n>MAX_SIZE)
11 {
12 printf("數組越界! ");
13 return 0
14 }
15 
16 for (int i = n; i < size - 1; i++)
17 {
18 arr[i] = arr[i + 1];
19 }
20 arr[size - 1] = -1;
21 --size;
22 }

 1 /修改元素
 2 
 3 int arr_change(int n,int data)
 4 {
 5 if (n > size&&n<MAX_SIZE)
 6 {
 7 printf("下表偏大,修改失敗! ");
 8 return 0;
 9 }
10 
11 if (n>MAX_SIZE)
12 {
13 printf("數組越界! ");
14 return 0;
15 }
16 arr[n] = data;
17 }
18 
19 //查詢元素
20 
21 void arr_query(int n)
22 {
23 printf("%d", arr[n]);
24 }
25 
26 int main()
27 {
28 for (int i = 1; i < 11; i++)
29 {
30 printf("%d ", i);
31 }
32 printf(" ");
33 arr_init();
34 assignment();
35 arr_show();
36 arr_del(5);
37 arr_change(5,22);
38 arr_show();
39 arr_query(6);
40 printf(" size==%d", size);
41 
42 getchar();
43 return 0;
44 }
45 
46 小子初學數據結構,如有不足之處,歡迎大神指正。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM