- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构知识点
第二章
2.1线性表的概念及其抽象数据类型的定义
2.1.1 线性表的逻辑结构
线性表的定义
线性表是n个类型相同的数据元素的有限序列,对n0,除第一个元素无直接前驱,最后一个元素无直接后继外,其余的每个数据元素只有一个直接前驱和一个直接后继。
线性表的特点:
同一性:线性表有同类元素数据组成,每一个必须属于同一数据类型。
有穷性:线性表由有限个数据元素组成,表长就是表中数据元素的个数。
3)有序性:线性表中相邻数据元素之间存在着序偶关系。
2.1.2线性表的抽象数据类型定义
抽象数据类型定义:见课本。
2.2线性表的顺序存储
2.2.1线性表的顺序存储结构
顺序存储结构的定义
线性表的顺序存储结构是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中在逻辑上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。采用顺序存储结构的线性表通常称为顺序表。
将线性表归纳为:关系线性化,节点顺序存。
假定顺序表中有个元素,每个元素占个单元,第一个元素的地址为,则可通过如下公式计算出第个元素的地址:
其中,称为基地址。
线性存储结构的C语言定义
#define MAXSIZE 100
typedef struct
{
ElemType elem[MAXSIZE]; /*ElemType 可为int,char等*/
int last; /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值)*/
}Seqlist;
上述为定义一个结构体,结构名为Seqlist。
知识延伸(typedef)(C课本用typedef声明新类型名)
2.2.2 线性表顺序存储结构上的基本运算
线性表的基本运算
查找操作
插入操作
删除操作
顺序表合并算法
线性表顺序存储结构的优缺点分析
2.3 线性表的链式存储
链表定义:采用链式存储结构的线性表称为链表。
链表的分类:
按实现角度看:链表可分为动态链表和静态链表。
按链接方式的角度看:链表可分为单链表、循环链表和双链表。
2.3.1 单链表
2.3.2 单链表上的基本操作
线性表的基本运算
初始化单链表
InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node)); /*建立头结点*/
(*L)-next=NULL; /*建立空的单链表L*/
}
注意:L是指向单链表的头结点的指针,用来接收主程序中带初始化单链表的头指针变量的地址,*L相当于主程序中带初始化单链表的头指针变量。
建立单链表
1)头插法建表
算法描述:从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新节点的数据域中,然后将新节点插入到当前链表的表头节点之后,直至读入结束标志为止。
单链表的存储结构:
typedef struct Node /*结点类型定义,结构体名为Node*/
{
ElemType data;
struct Node * next;
}Node,*Linklist; /*LinkList为结构指针类型*/
LinkList与Node *同为结构指针类型,这两种类型是等价的。通常习惯上用LinkList说明指针变量,强调他是某个单链表的头指针变量。例如,使用定义LinkList L,则L为单链表的头指针,从而提高程序的可读性。用Node *来定义指向单链表中节点的指针,例如,Node *p,则p为指向单链表中节点的指针变量。
算法:
typedef struct Node
{
ElemType data;
struct Node * next;
}Node,*Linklist;
void CreatFromHead(LinkList L)
{
Node *s;
char c;
int flag=1;
while(flag)
{
c=getchar();
if(c!=$)
{
s=(Node *)malloc(sizeof(Node));
s-data=c;
s-next=L-next;
L-next=s;
}
else flag=0;
}
}
尾插法建表
算法描述:头插法建立链表虽然简单,但生成的链表中结点的次序和输入的顺序相反。若希望二者相同,可采用尾插法建表。该方法是将新节点插到当前单链表的尾上。为此需增加一个尾指针r,使之指向当前单链表的结尾。
算法:
typedef struct Node
{
ElemType data;
struct Node * next;
}Node,*Linklist;
void
您可能关注的文档
最近下载
- 部编版四年级语文上册期末复习1-8单元看拼音写词语(带答案).docx VIP
- T∕ZZB 1243-2019 66kV~220kV交流电缆用交联聚乙烯绝缘料.docx VIP
- 文化遗产数字化采集与数据库建设.docx VIP
- 部编版小学语文5上1-8单元(全册)看拼音写词语(巩固复习).pdf VIP
- 隔音声屏障工程设计方案(3篇).docx VIP
- 07MR403 城市道路-护坡.pdf VIP
- BCAT_0001—2018建设工程人工材料设备机械数据分类标准及编码规则 2018 207页.pdf VIP
- 食品安全事故应急处置培训.docx VIP
- (最新2025)三方抵账协议范本工程款抵房三方协议范本6篇.docx
- 老年患者营养评估与干预.pptx VIP
文档评论(0)