C语言编程简单却重要的数据结构顺序表全面讲解

这篇文章主要为大家介绍了C语言编程中非常简单却又非常重要的数据结构顺序表的全面讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助

前言

本文主要介绍顺序表的定义和常见静态顺序表的用法。

一、线性表定义

线性表(line list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串。
线性表在逻辑上是线性结构,也就是说是连续的一条直线。但在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储

二、顺序表实现

1概念及结构

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

顺序表一般可表示为:

1.静态顺序表:使用定长数组存储。
2.动态顺序表:使用动态开辟的数组存储。

我们以简单的静态顺序表进行引例(与动态顺序表接口函数思想是一样的)
代码如下(示例):


#define N 10//这里定义宏是为了方便将来如果需要更改空间的大小,而代码中用到的10过于多要更改多次,宏定义直接改N大小即可
typedef int SQDataType;//这里顺序表10个空间都是int型,如果将来要改变类型,可以在这里把int改为所需类型
struct SeqList//单个数据直接定义变量,多个数据定义结构体
{
	SQDataType a[N];//顺序表有10个空间可进行存储
	int size;//顺序表存了几个数据(有10个空间不一定就存10个数据)
};

ps:顺序表的一些要求:
1.连续的物理空间存储-用的是数组
2.数据必须是从头开始,依次存储

2静态顺序表

2.1实现顺序表接口,第一步要对顺序表进行初始化

代码如下(示例):


#include<stdio.h>
#include<string.h>//memset函数头文件
//增删查改等接口函数
void SeqListInit(struct SeqList *ps)
{
	memset(ps->a, 0, sizeof(SQDataType)*N);//memset是一个初始化函数
	//sl.a表示按字节初始化
	//0表示初始化为0
	//sizeof(SQDataType)表示数组内每个元素大小(之前定义了SQDataType=int),N表示数组内共有N个元素,两者相乘是数组大小
	ps->size = 0;
}
void TestSeqList1()
{
	struct SeqList sl;//sl是实参,上面的ps是形参,为了实参和形参可以相互影响,这里用的是传址调用
	SeqListInit(&sl);
}
int main()
{
	TestSeqList1();
	return 0;
}
//ps:如果这里你觉得写struct SeqList sl烦,你可以这样改进代码(这里和2.1代码对应)
//typedef struct SeqList//单个数据直接定义变量,多个数据定义结构体
//{
//	SQDataType a[N];//顺序表有10个空间可进行存储
//	int size;//顺序表存了几个数据(有10个空间不一定就存10个数据)
/

本文标题为:C语言编程简单却重要的数据结构顺序表全面讲解