超详细介绍最基本的数据结构线性存储

声明:该文章所有内容均参考陈越教授主编的《数据结构》一书

数据存储是我们学习中常见的问题,其中较为简单的存储方式就是线性结构,下面我们花一点时间来了解一下线性结构

目录

一、什么是线性结构

二、线性表

三、堆栈

四、队列

五、应用举例

一、什么是线性结构

线性结构是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列

线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。

常见的线性结构有:线性表,堆栈,队列等,这些都存在顺序存储和链式存储两种方式。

二、线性表

定义:线性表是一种最常见的数据存储结构,它的实现方式较为简单,且设计思路清晰,无需太多的算法基础。

1、顺序存储:顺序存储一般借助数组,我们通常定义一个结构,里面包括一个被定义类型的数组和一个数据最大值,下面看代码实现:

typedef struct lnode{

	elementype data[maxsize];
    int last;//数组中最后一个元素的位置 
}list;

初始化:创建一个空的顺序线性表:

list_make()//创建一个空的顺序表 
{
	list * L;
    L=(list*)malloc(sizeof(struct lnode));
	L->last=-1;
	return L;
}

下面是一些对顺序存储线性表的操作函数:

(1)查找元素

list_find(int x,list *L)//在该顺序表中查找所找元素的位置 
{
	int i=0;
	while(i<=L->last&&l->data[i]!=x){
		i++;
	if(i>L->last) return error;
	else return i;
	}
}

(2)插入元素:对于数组而言。它的大小是固定的,我们必须在数组所能表示的范围内进行插入,所以数组在插入之前一定不会被完全占满,这就造成了空间的浪费,同时,插入只能从插入位置向后移动,由此来空出一个位置这样的循环遍历会让算法的时间复杂度增加,现在看代码实现:

list_insert(int x,int i,list * L){ //插入元素,注意,第i个元素实际对应的是下标为i-1的数组元素 
    int j;
	if(L->last==maxsize-1){
		printf("full"); 
		return 0;
	} 
	if(i<=0||i>=L->last+1){
		printf("无符合的位置");
		return 0; 
	}
	for(j=L->last;j>=i-1;j--){
		L->data[j+1]=L->data[j];
	}
	L->data[i]=x;
	L->last++;
	return 0;
	} 

(3)删除元素:与插入一样,也是将后面的元素循环遍历向前面移动

list_delete(int i;list * L){ //删除 
	int j;
	if(i<=0||i>=L->last+1){
		printf("不存在这样的元素");
		return 0; 
	}
	for(j=i;j<=L->last;j++){
		L->data[j-1]=L->data[j];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值