数据结构讲义第二章.ppt

数据结构讲义第二章

1.定义: 线性表是由n (n≥0)个类型相同的数据元素a1,a2,…,an组成的有限序列,记做L=(a1,a2,…,ai-1,ai,ai+1, …,an)。 2.线性表的特点: 同一性:线性表由同类数据元素组成,每一个ai必须属于同一数据对象。 有穷性:线性表由有限个数据元素组成,表长度就是表中数据元素的个数(即n)。n=0时称为空表,记作L=()。 有序性:线性表中表中相邻数据元素之间存在着序偶关系ai,ai+1。 例1: 英文字母表(A,B,C,…,Z)是一个线性表 例2: 2.1.2? 线性表的运算 (1)initial_list(L):建立线性表。 操作结果:将L初始化为空表。 (2)list_length(L) 操作前提:线性表L已存在。 操作结果:如果L为空表则返回0,否则返回表中的元素个数。 (3)get_element(L,i,x)* 操作前提:表L存在,且i值合法,即1≤i≤list_length(L)) 操作结果:用变量x返回线性表L中第i个元素的值。 (5)list_insert (L,i,x) ** 操作前提:表L已存在,x为合法元素值且1≤i≤list_length(L)+1。 操作结果:在L中第i个位置之前插入新的数据元素x,L的长度加1。 (6)list_delete(L,i) ** 操作前提:表L已存在且非空, 1≤i≤list_length(L)。 操作结果:删除L的第i个数据元素,L的长度减1。 // 线性表的顺序存储结构 #define maxlen 100 //存储空间的初始分配量 typedef struct { elementtype data[maxlen]; //定义顺序表中元素的数组 int listlen; //定义表长度 }seqlist; 表初始化 求表长度 按序号求元素* 查找元素* 插入元素* * 删除元素* * 插入运算list_insert(L,i,x)** 定义: 在第i(1?i ? n+1)个元素前插入一个新的数据元素x,使长度为n的线性表 (a1,a2,……,ai-1,ai,……,an) 变成长度为n+1的线性表 (a1,a2,……,ai-1,x,ai,……,an) 算法分析: 线性链表(单链表)定义:结点中只含一个指针域的链表叫线性链表,也叫单链表 1.初始化单链表 2.求链表长度 3.按序号取元素 4.查找** 5.插入** 6.删除** 7.头插法建立单链表** 8.尾插法建立单链表** int list_length(node *L) { int n=0; node *p=L-next; while(p!=NULL) { n++; p=p-next; } return n; } 3.按序号取元素 node *get_element(node *L , int i) { node *p=L-next; int j=1; while( j!=i p!=NULL) { p=p-next; j++; } return p; } 4.查找 算法演示 node *list_locate(node *L;elementtype e) { node *p=L-next; while(p!=Null p-data!=e) p=p-next; if(p==Null) printf(“not found”); else return p; } 5.插入 6.删除 7.头插法建立单链表 算法描述: 逆位序输入n个元素的值,建立带头结点的单链表 头插法建立单链表算法实现 8.尾插法建立单链表 算法描述: 正位序输入n个元素的值,建立带头结点的单链表 尾插法建立单链表算法实现: 单链表特点 它是一种动态结构,整个存储空间为多个链表共用 不需预先分配空间 指针占用额外存储空间 不能随机存取,查找速度慢 思考题:将两个有序链表并为一个有序链表 算法描述:设头指针La和Lb的单链表分别为线性表LA和LB的存储结构,现要归并La和Lb得到单链表Lc. 需设立3个指针pa,pb和pc,其中pa和pb分别指向La表和Lb表中当前待比较插入的结点,而pc指向Lc表中当前最后一个结点.若pa-data=pb-data,则将pa所指结点链接到pc所指结点之后,

文档评论(0)

1亿VIP精品文档

相关文档