为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

第2章 数据结构-线性表_1_顺序表

2010-06-01 25页 ppt 443KB 34阅读

用户头像

is_886512

暂无简介

举报
第2章 数据结构-线性表_1_顺序表null第2章 线性表第2章 线性表2.1 线性表的定义和运算2.1 线性表的定义和运算一、线性表的定义:一、线性表的定义:1、定义: 线性表 L是由n个元素a1,a2,…,an组成的有限序列。记作L=(a1,a2, …,an) 注:(1)n>=0为表长; (2)n=0时为L空表;记作L=() 如:字母表{A,B,C,…,Z} 数字表(0,1,2,3,…,9) (同一表中,元素类型相同。)null2、特点: …, ai-1 , ai , ai+1 ...
第2章 数据结构-线性表_1_顺序表
null第2章 线性表第2章 线性表2.1 线性表的定义和运算2.1 线性表的定义和运算一、线性表的定义:一、线性表的定义:1、定义: 线性表 L是由n个元素a1,a2,…,an组成的有限序列。记作L=(a1,a2, …,an) 注:(1)n>=0为表长; (2)n=0时为L空表;记作L=() 如:字母表{A,B,C,…,Z} 数字表(0,1,2,3,…,9) (同一表中,元素类型相同。)null2、特点: …, ai-1 , ai , ai+1 ,… ai-1 称为 ai 的直接前驱, ai+1称为 ai 的直接后继。 除首元素外每个元素有且仅有一个直接前驱; 除尾元素外每个元素有且仅有一个直接后继;二、线性表的基本运算 二、线性表的基本运算 (1)初始化 initial_list(L) 建空表; (2)求表长 list_length(L) (3)按序号取元素 get_element(L,i) (4)按值查找 list_locate(L,x)null(5)插入 list_insert(L,i,x) 在表中第i个位置上插入元素x; 1 ≤ i ≤ n+1 (6)删除 list_delete(L,i) 删除表中第i个元素; 1 ≤ i ≤ n2.2 顺序表2.2 顺序表一、线性表的顺序存储结构一、线性表的顺序存储结构1、定义: 假设有一个足够大的连续的存储空间,将线性表中的元素按其逻辑次序依次存储到这一存储空间中,由此方式存储的线性表称为顺序表。 null顺序表示意图n-1null2、类型描述 #define maxlen 100 typedef struct { elementtype data[maxlen]; int listlen; }seqlist; 变量定义,如:seqlist L,L1; 注:a:data[maxlen]的下标是0到maxlen-1; b:listlen是线性表的长度,最后一个元素下标是listlen-1;null3、顺序表的特点: 逻辑上相邻的元素,其存储地址也相邻; 即,可以随机存取元素。 二、顺序表运算的实现二、顺序表运算的实现1、初始化(建空表): void initial_list(seqlist *L) { L->listlen=0; } 2、求表长: int list_length(seqlist L) { return L.listlen; }null3、按序号取元素: void get_element(seqlist L,int i,elementtype & x) { if (i<1||i>L.listlen) error(“序号错”); else x=L.data[i-1]; }null4、按值查找: (找到则返回其序号,否则返回0) int list_locate(seqlist L,elementtype x) { int i; for(i=0;ilistlen==maxlen) error(“溢出”); else if(i<1||i>L->listlen+1) error(“序号错误”); else { for(j=L->listlen-1;j>=i-1;j--) L->data[j+1]=L.data[j]; L->data[i-1]=x; L->listlen++; } }null插入算法的时间分析 在i=1,2,…,n+1时, 元素移动的次数分为n,n-1,…,0。 平均移动次数(等概率情况下): (0+1+…+n)/(n+1)=n/2null6、删除: null分析: 首先判断顺序表是否为空以及i的取值; 可以则删除: (1)ai+1~an往前移一位; (2)表长-1; nullvoid list_delete(seqlist *L,int i) { int j; if (L->listlen<=0) error(“下溢出”); else if(i<1||i>L->listlen) error(“序号错误”); else { for (j=i; j<=L->listlen-1; j++) L->data[j-1]=L->data[j]; L->listlen--; } }null删除算法的时间分析: 在i=1,2,…,n时,元素移动的次数分别为n-1,n-2,…,0。 平均移动次数: (0+1+…+(n-1))/n=(n-1)/2三、顺序表的应用三、顺序表的应用 已知顺序表L递增有序,算法,在L中插入元素x,使得L依然递增有序。例null算法如下: void insert( seqlist *L,elementtype x ) { int i=L->listlen-1; if (i>=maxlen-1) error(“溢出”); else { while(i>=0 && L->data[i]>x) L->data[i+1]=L->data[i--]; L->data[i+1]=x; L->listlen++; } }解:null
/
本文档为【第2章 数据结构-线性表_1_顺序表】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索