数据结构基础(第一章:线性表)

数据结构基础

第一章 线性表



前言

作为刚步入大学的计算机学生,打算记录自己的学习的同时总结知识点,如出现错误请包涵,也希望能与你一起进步!!


一、线性表的定义

1.定义与性质

·线性表是零个或多个数据元素(自定义元素也可)构成的线性序列,记为(a0,a1,…an)。

·线性表中的数据元素个数n称为线性表的长度,当n=0时,线性表为空表。

·线性表(a0,a1,…ai-1,ai,ai+1,…an),其中ai-1是ai的直接前驱,ai+1是ai的直接后驱。特别的:a0没有直接前驱,an没有直接后驱。

·线性表示例:
1,字母表(a,b,c,d…);
2,学生信息表(这属于自定义数据类型)
学生信息表

2.线性表的抽象数据类型

也就是代码实现
ADT List{
数据:
零个或多个数据元素构成的线性序列(即创建一个数组或链表,可以是普通类型,也可以自己定义)。
运算:
·Lnit(L,n):构造一个空的线性表L。
·Destory(L):销毁。
·IsFull():判断表是否已满
·IsEmpty(L):判断表是否为空。
·Length(L):获取表的长度。
·Find(L,i):获取ai位置的元素。
·Insert(L,x,i):在表的x位置插入元素i。
·Delete(L,i):删除元素ai,后面的元素前移。
·Update(L,i,x):将ai位置的元素更新为x。
·Output(L):输出线性表所有元素。
}

二、线性表的顺序实现

顺序实现即使用数组

1.定义

·利用连续的储存空间,按照数据元素在线性表中的序号依次存储数据元素。
·采用顺序储存的线性表称为顺序表。
·实现时采用一维数组秒速线性表的存储结构
代码部分

typedef struct list
{
	ElemType *arr; //这里的ElemType 是数据类型。
	int cur;  //数组的当前元素个数。
	int length; //数组长度。
}List;

2.运算实现

这个部分我就只列两个主要的部分;

·插入运算

bool Insert(List *L,int i,ElemType x)
	{
		if(IsFull(L))
			return false;
		for(int j=L.cur;j>i;j--)
			L->arr[j+1]=L->arr[j];
		L->arr[i]=x;
		return true;
	}

·删除运算

bool Delete(List *L,int i)
{
	if(Isfull(L))
		return false;
	for(int j=i;j<L->n;j++)
		L->arr[j]=L->arr[j+1];
	return true;
}

三、线性表的链接实现

链接实现即使用链表,链表又分为单链表、双向链表、循环链表等,这里我们通过单链表进行实现。

1.定义

typedef struct node
{
	Elemtype element;
	Node *next
}Node;

typedef struct list
{
	Node *head;
	int length;
}List;

2.运算

包括元素的插入以及元素的删除

1 bool Insert(List *L,int i,int x)//插入运算
{
	if(i<0||i>L->lenth)//当插入位置不符合时返回;
		return false;
	Node *p=L->head;
	for(int j=0;j<i;j++)
		p=p->head;
	Node *q=p;
	q->next=p->next;
	p->next=q;
	q->element=x;
	L->lenth+=1;
	return true;
}
2 bool ListDle(List *L,int i)//删除运算
{
	if(i<=0||i>:->lenth)
		return false;
	Node *p=L->head;
	for(int j=0;j<i-1;j++)
		p=p->next;
	Node *q=p->next;
	p->next=q->next;
	free(q);
	L->lenth-=1;
	return true;
}

四、顺序实现与链接实现对比

1.顺序实现

优点:
(1) 可随机访问
(2) 存储空间利用率高
缺点:
(1) 插入、删除效率较低
(2)元素存储空间需提前分配,难以临时扩大

2.链接实现

优点:
(1)插入删除元素效率较高
(2)无最大元素存储个数,可随时扩大
缺点:
(1)存储空间利用率较低
(2访问元素效率较低
链接实现:

总结

以上就是今天要讲的内容,本文仅仅简单介绍了线性表的顺序实现与链接实现,而线性表的实际应用还需大家自己发掘咯!!

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的大脸猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值