【数据结构】一、线性表

写在前面

本人是一位计算机的大一新生,也是经常在网上查找文章进行学习,经常有时候会懒得做笔记了,就在网上找相应写的比较好的文章收藏便于复习,但是有时候一个知识点我需要收集好几个文章的信息并且内容多有重复,不便于整理,于是萌发了自己写文章的念头。目的是能督促自己对知识点进行总结整理,加深理解,以自己能理解的方式记录下来,也希望能帮助到向我一样努力积极勤奋的计算机新手,欢迎大家讨论交流!

本篇为本人第一篇文章,写个最简单的线性表练练手吧!🥰

如果有哪里理解的不对的地方,欢迎指正!

一、引言

线性表是最简单的一种数据结构,其内部主要为一个数组,并且额外地增加了变量size记录元素个数。

在计算机科学中,线性表被广泛应用于各种场景,如排序、查找、数据存储等。

二、线性表的特点

  1. 有序性:线性表中的元素按照一定的顺序排列,可以是升序、降序或其他特定的排序方式。

  2. 确定性:每个元素在线性表中的位置是确定的,可以通过位置索引访问元素。

  3. 有限性:线性表的元素数量是有限的,通常在实际应用中不会无限制地增长。

三、线性表的优点

  1. 简单易用:线性表的概念和操作相对简单,易于理解和实现。

  2. 高效的访问:可以通过索引快速访问线性表中的元素,访问时间复杂度通常为 $O(1)$。

  3. 常见的数据结构基础:许多其他复杂的数据结构都是基于线性表构建的,如栈、队列、链表等。

四、线性表的基本 C 代码实现

结构体定义
#define MaxSize 100

typedef struct {
    int list[MaxSize];  //使用数组来存储元素
    int size;           //记录存储的元素个数
}LinList;
基础操作的实现
//初始化线性表
void LinearList_Init(LinList* head)
{
	head->size = 0;
}

//求当前元素个数
int LinearList_Length(LinList head)
{
	return head.size;
}

//在线性表第i个位置插入元素x(下标从0开始)
//插入成功返回插入的值,否则返回0
int LinearList_Insert(LinList* head,int i,int x)
{
	if (head->size >= MaxSize)
	{
		printf("线性表已满无法加入!\n");
		return 0;
	}
	if (i < 0 || i > head->size)
	{
		printf("输入的范围不合法!\n");
		return 0;
	}
	int j;
	for (j = head->size; j > i; j--)
	{
		head->list[j] = head->list[j - 1];
	}

	head->list[i] = x;
	head->size++;
	return x;
}

//打印顺序表所有元素
void LinearList_Print(LinList head)
{
	for (int i = 0; i < head.size; i++)
	{
		printf("%d ", head.list[i]);
	}
	printf("\n");
	
}

//删除第i个位置的元素
//失败返回0,成功返回删除的数据
int LinearList_Distory(LinList* head, int i)
{
	if (head->size == 0)
	{
		printf("线性表已空!\n");
		return 0;
	}
	if(i >= head->size || i < 0)
	{
		printf("输入范围不合法!\n");
		return 0;
	}
	int x = head->list[i];
	for (int k = i; k < head->size - 1; k++)
	{
		head->list[k] = head->list[k + 1];
	}
	head->size--;
	return x;
}


//取特定位置的元素并存储到x中
//参数为线性表头,取元素的位置,数据缓存
//成功返回1,否则返回0
int LinearList_Get(LinList head, int i, int* x)
{
	if (i >= head.size || i < 0)
	{
		printf("输入范围不合法!\n");
		return 0;
	}
	*x = head.list[i];
	return 1;
}

//查找元素并存储到x中
//参数为线性表头,数据缓存
//返回指定元素的下标,若元素不存在,返回-1
int LinearList_Find(LinList head, int x)
{
	for (int i = 0; i < head.size; i++)
	{
		if (head.list[i] == x)
			return i;
	}
	printf("要查找的元素%d不存在!\n",x);
	return -1;
}
简单测试一下
int main()
{
    LinList L;
    LinearList_Init(&L);
    LinearList_Insert(&L, 0, 1);
    LinearList_Insert(&L, 1, 2);
    LinearList_Insert(&L, 2, 3);
    LinearList_Insert(&L, 3, 4);
    LinearList_Print(L);
    int x;
    LinearList_Get(L, 2, &x);
    printf("%d\n", x);
    LinearList_Distory(&L, 2);
    LinearList_Print(L);
    LinearList_Find(L, 3);
    return 0;
}

运行结果如下:

五、总结

线性表作为一种基本的数据结构,具有有序、确定、有限的特点,以及简单易用、高效访问等优点。它在各种应用场景中都有广泛的应用,并且是许多其他数据结构的基础。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值