线性表是最经常使用且最简单的一种数据结构。一个线性表是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表示每一个数据元素占用的存储单元的长度)编程语言
显而易见,这种存储结构,相邻元素在物理位置上也相邻。学习
一般,咱们把采用这种存储结构的线性表称为“顺序表”。spa
有了基本的概念以后,咱们就能够使用编程语言进行描述,使用C、C++、C#、Java等均可以,这篇文章我使用C语言描述。3d
1、顺序表code
先定义好线性表,而后就能够对它进行操做了,常见的线性表的基本操做有:建立线性表、查找元素、插入元素、删除元素、清空、归并等。对象
下面我会贴出代码,欢迎你们一块儿学习交流!blog
推荐下我本身的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 小子初学数据结构,若有不足之处,欢迎大神指正。