第二讲 线性表22.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线性表(Linear list)是最简单且最常用的一种数据结构。 这种结构具有下列特点: 存在一个唯一的没有前驱的(头)数据元素; 存在一个唯一的没有后继的(尾)数据元素; 此外,每一个数据元素均有一个直接前驱和一个直接后继数据元素。 2.1 线性表的类型定义 线性表由一组具有相同属性的数据元素构成。 数据元素在不同的具体情况下,可以有不同的含义。 在一些复杂的线性表中,每一个数据元素又可以由若干个数据项(Data item)组成,在这种情况下,通常将数据元素称为记录(record)。 线性表的例子 例1:英文字母表. (A,B,C,D,E,F,……X,Y,Z) 例2:一列火车的车厢编号. (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) 综上所述: 元素个数n为表长度,n=0为空表 元素同构,且不能出现缺项 2.2 线性表的顺序表示和实现 概念:在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。 顺序存储(Sequential storage、 Mapping) (设一元素占用一个存储单元) 例如,线性表( a1 a2 a3 a4 )只需4个存储单元。但它只能存储在图(1)的区域。图(2)中,虽然也有大于线性表所需的存储空间, 但是,不能用来存储这个表。因为,图2中没有位置连续的4个可用单元,若用图2必将数据A或B进行移动。    0   1 2 3   4 。。 M-1 顺序存储中逻辑地址 与物理地址 之间的关系 顺序存储的实现 在高级程序语言中,一般都用数组来描述顺序存储。在C语言中可用动态分配的一维数组描述如下。 #define LIST_INIT_SIZE 100 //初次分配用户预估空间量 #define LISTINCREAENT 10 //每次分配增量 Typedef struct { ElemType *elem; // 数组指针表的基址 int length; // 当前长度,实际已存元素个数 int listsize; //任何时刻能存最多元素个数 }SqList; 空间量=最多元素个数 *每次分配增量(每个元素占用空间量)。 calloc() realloc() malloc() Free() Malloc()函数 函数格式: void(或char)* malloc(unsigned size) 函数功能: 在内存中分配大小为size字节的地址连续的空间. 函数返回值: 所分配的内存块首字节地址,若分配不成功(如内存不够)则返回0. Malloc()函数举例 例1:分配内存地址连续的变量 Int *p; P=(int *)malloc(3*sizeof(int)); 例2:分配内存地址连续的结构体 Struct student *p; P=(struct student *)malloc(sizeof(struct student)); Free()函数 函数格式: void(或char) free(void* p) 函数功能: 释放P所指的内存区. 函数返回值: 无 1.构成一个空线性表 Status InitList_Sq(SqList L)// L表的名字 { L.elem =(ElemType*)malloc(LIST_INIT_ SIZE*sizeof(ElemType)); if(! L.elem) exit(OVERFLOW); // 分配失败 L.length = 0; //数据元素个数为0 L.Listsize =LIST_INIT_SIZE; // 最多元素个数 return OK; } 2、线性表上的插入操作 已知内存中有Sq-List类型的顺序表L(a1…ai-1,ai,…an) 。要 求把一个新的数据e插到表中第I个数据之前。 e插入前为图1;e插 入后为图2: 图2-3 新数据e插入前 Void Insert list(seq list *L,data type x,int i){ if (i 1 || i L-length+1) Error(position error);// 插入位置不合法 if (L-length+1 =L.listsize) Error( overflow); /

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档