简单的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语言描述。

一、顺序表

先定义好线性表,然后就可以对它进行操作了,常见的线性表的基本操作有:创建线性表、查找元素、插入元素、删除元素、清空、归并等。

下面我会贴出代码,欢迎大家一起学习交流!

#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;

}

如有不足之处,欢迎大神指正。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180718A14SHJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励