线性表是最常用且最简单的一种数据结构。一个线性表是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语言描述。
一、顺序表
先定义好线性表,然后就可以对它进行操作了,常见的线性表的基本操作有:创建线性表、查找元素、插入元素、删除元素、清空、归并等。
下面我会贴出代码,欢迎大家一起学习交流!
#include
#define MAX_SIZE 20
int arr[MAX_SIZE] = { 0 };
int size = 0;//有效元素个数
//标识符
void arr_init()
{
for (int i = 0; i
{
arr[i] = -1;
}
}
//输出
void arr_show()
{
for (int i = 0; i
{
printf("%d ", arr[i]);
}
printf("\n");
}
//插入数据
int arr_add(int n,int data)
{
if (n>size&&n
{
printf("添加失败,插入位置偏大!");
return 0;
}
if (n >= MAX_SIZE)
{
printf("添加失败,数组越界!");
return 0;
}
for (int i = size; i > n; i--)
{
arr[i] = arr[i-1];
}
arr[n] = data;
size = size + 1;
return 1;
}
/删除元素
int arr_del(int n)
{
if (n > size&&n
{
printf("下表偏大,此位置无元素!\n");
return 0;
}
if (n>MAX_SIZE)
{
printf("数组越界!\n");
return 0;
}
for (int i = n; i
{
arr[i] = arr[i + 1];
}
arr[size - 1] = -1;
--size;
}
//修改元素
int arr_change(int n,int data)
{
if (n > size&&n
{
printf("下表偏大,修改失败!\n");
return 0;
}
if (n>MAX_SIZE)
{
printf("数组越界!\n");
return 0;
}
arr[n] = data;
}
//查询元素
void arr_query(int n)
{
printf("%d", arr[n]);
}
int main()
{
arr_init();
for (int i = 0; i
{
arr[i] = i;
size++;
}
arr_show();
arr_add(6, 123);
arr_show();
arr_del(5);
arr_del(7);
arr_show();
printf("\n\nsize==%d", size);
getchar();
return 0;
}
如有不足之处,欢迎大神指正。
领取专属 10元无门槛券
私享最新 技术干货