北方民族大学数据结构与算法课件第二章 线性表.pptVIP

  • 0
  • 0
  • 约1.25万字
  • 约 68页
  • 2019-05-06 发布于广东
  • 举报

北方民族大学数据结构与算法课件第二章 线性表.ppt

第二章 线性表 线性表 顺序表 链表 顺序表与链表的比较 线性表 定义: n(?0)个数据元素的有限序列,记作(a1, …ai-1, ai, ai+1,…, an) 其中,ai 是表中数据元素,n 是表长度。 特点: 同一线性表中元素具有相同特性。 相邻数据元素之间存在序偶关系。 除第一个元素外,其他每一个元素有一个且仅有一个直接前驱。 除最后一个元素外,其他每一个元素有一个且仅有一个直接后继。 线性表的基本操作 1)SETNULL(L) 初始化,构造一个空的线性表 2)LENGTH(L) 求长度,返回线性表中数据元素个数 3)GET(L,i) 取表L中第i个数据元素赋值 4)LOCATE(L,x) 按值查找,若表中存在一个或多个值为x的结点,返回第一个找到的数据元素的位序,否则返回一个特殊值。 5)INSERT(L,x,i) 在L中第i个位置前插入新的数据元素x,表长加1。 6)DELETE(L,i) 删除表中第i个数据元素,e返回其值,表长减1。 顺序表 定义:将线性表中的元素相继存放在一个连续的存储空间中。 存储结构:数组。 特点:线性表的顺序存储方式。 存取方式:顺序存取 顺序存储结构示意图 顺序表的存储方式: 顺序表(Sequenlist)的类型定义 #define maxsize 1024 //最大允许长度 typedef int datatype; typedef struct {datatype data[maxsize]; //存储空间基址 int last; //当前元素个数 } sequenlist; sequenlist *L; 顺序表基本运算 按值查找:找x在表中的位置,若查找成功,返回表项的位置,否则返回-1 int LOCATE( sequenlist *L, datatype x ) { int i = 0; while ( i (*L).last (*L).data[i] != x ) i++; if ( i (*L).last ) return i; else return -1; } 求表的长度 int Length ( sequenlist *L ) { return (*L).last+1; } 提取函数:在表中提取第 i 个元素的值 datatype Get ( sequenlist *L, int i ) { if ( i = 0 i (*L).last) return (*L).data[i]; else printf ( “参数 i 不合理!\n” ); } 插入 顺序表的插入 int Insert ( sequenlist *L, datatype x, int i ) { int j; //在表中第 i 个位置插入新元素 x if (i 0 || i (*L).last|| (*L).last == maxsize) return 0; //插入不成功 else { for ( j = (*L).last; j =i-1; j-- ) (*L).data[j] =(* )L.data[j -1]; (*L).data[i] = x; (*L).last++; return 1; //插入成功 } } 删除 顺序表的删除 int DELETE ( sequenlist *L, datatype x ) {int i, j; //在表中删除已有元素 x i = LOCATE (L, x); //在表中查找 x if ( i = 0 ) { (*L).last -- ; for ( j = i; j L.last; j++ ) (*L).data[j] = (*L).data[j+1]; return 1; //成功删除 }

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档