线性表是最常用且最简单的一种数据结构。一个线性表是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 小子初学数据结构,如有不足之处,欢迎大神指正。