- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 线性表
第3讲:线性表的概念与表示;(2) 逻辑结构上的分类:集合、线性、树、图;线性结构的一种:线性表;线性表引例;2.1 线性表的基本概念;2.1 线性表的基本概念;2.1 数据元素的类型;2.1 线性表特点;;2.1 线性表的抽象数据类型;2.1 线性表的抽象数据类型;线性表的数据结构;;顺序存储:
用一组连续的内存单元、按照逻辑顺序、
依次存储线性表中的元素 ?顺序表;
; 逻辑相邻 <=> 物理相邻(存储位置相邻); 逻辑相邻 <=> 物理相邻(存储位置相邻);struct SeqList
{ int MaxNum;
int n;
DataType *element;
};;PSeqList palist; ;typedef struct SeqList * PSeqList; ;palist -> element[i];; 1. 创建空顺序表
2. 判断顺序表是否为空表
3. 查找元素、求某元素的下标
4. 在顺序表中插入元素
5. 从顺序表中删除元素;3) 设置表的最大长度MaxNum, 实际长度0; printf(“Out of space!\n”); //结构空间分配失败
return NULL; ; if(palist != NULL) //顺序表结构空间申请成功;int isNullList_seq(PSeqList palist)
{
return (palist->n ==0); //空则返回1
};在palist指向的顺序表中查找x,返回下标;在顺序表中下标为p的元素之前插入x;4. 插入元素; if (p<0 || p> palist->n )
{ printf(“p does not exist! \n”); return 0; };palist->n = palist->n+1;
return 1;
}
;1. 在palist指向的顺序表中,删除下标为p的元素;5. 删除元素;int delete_seq(PSeqList palist, int p);1. 查找x首次出现的位置下标p
int p = locate_seq(palist, x);;-- 问题规模n,待查找元素x的下标为p,
在下标p处插入或删除;顺序存储:
用一组连续的内存单元、按照逻辑顺序、
依次存储线性表中各元素 ?顺序表;
;非连续的内存单元;;;;2.3.1 带头结点的单链表;typedef struct Node * LinkList; ; 1. 创建空表
2. 判断是否为空表
3. 查找元素、求某元素的存储位置
4. 在单链表中插入元素
5. 从单链表中删除元素;2. 为头结点申请空间;;LinkList createNullList_link(void);int isNullList_link(LinkList llist)
{
return ( llist->link == NULL) ;
}; return (p);
}; 在指针p所指结点之后,插入元素x; else;2. 申请新结点q,置其数据域为x;;寻找指针p所指结点的前驱:;寻找p结点的前驱;4. 插入元素; //若成功找到下标为i-1的结点(p正指向它)
;q=(PNode)malloc(sizeof(struct Node)); ; 从单链表中删除第1个值为x的结点;int deleteV_link(LinkList llist, DataType x);2. 删除p;在单链表中查找第一个值为x的元素:
---- 从头结点开始,遍历、匹配
---- 时间复杂度为O(n);顺序存储:
用一组连续的内存单元、按照逻辑顺序、
依次存储线性表中各元素 ?顺序表;
;优点:
1. 存储密度高:数据本身所占空间/结点空间;
2. 方便随机存取表中任一元素;;优点:
1. 插入或删除,只需修改指针,无需移动元素;
2. 动态分配存储空间;
文档评论(0)