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 小子初学数据结构,如有不足之处,欢迎大神指正。

 

posted @ 2018-08-13 16:47  C语言Plus  阅读(5848)  评论(0编辑  收藏  举报