同城约会| 杂志期刊| 小说| 两性论坛| 军事电影| 两性知识| 电脑知识| 汽车| 旅游| 收藏
频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

数据结构教程 第六课 线性表的顺序表示和实现

来源: 作者: 出处:综艺读书 2006-05-06 
关 键 词:数据结构  存储  c语言  c++  

本课主题: 线性表的顺序表示和实现

教学目的: 掌握线性表的顺序表示和实现方法

教学重点: 线性表的顺序表示和实现方法

教学难点: 线性表的顺序存储的实现方法

授课内容:

复习

1、存储结构

逻辑结构   “数据结构”定义中的“关系”指数据间的逻辑关系,故也称数据结构为逻辑结构。
存储结构   数据结构在计算机中的表示称为物理结构。又称存储结构。
顺序存储结构
链式存储结构

2、线性表的类型定义

一、线性表的顺序表示

用一组地址连续的存储单元依次存储线性表的数据元素。C语言中的数组即采用顺序存储方式。

2000:0001
2000:0003
2000:0005
2000:0007
2000:0009
2000:0011
2000:0013
2000:0015
2000:0017
...
2000:1001
2000:1003
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1
                               
                               
                               
a[9]
1
2
3
4
5
6
7
8
9
 
 
 

假设线性表的每个元素需占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则存在如下关系:

LOC(ai+1)=LOC(ai)+l

LOC(ai)=LOC(a1)+(i-1)*l

式中LOC(a1)是线性表的第一个数据元素的存储位置,通常称做线性表的起始位置基地址。常用b表示。

线性表的这种机内表示称做线性表的顺序存储结构或顺序映象。

称顺序存储结构的线性表为顺序表。顺序表的特点是以元素在计算机内物理位置相邻来表示线性表中数据元素之间的逻辑关系。

二、顺序存储结构的线性表类C语言表示:

线性表的动态分配顺序存储结构

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct{

ElemType *elem; //存储空间基址

int length; //当前长度

int listsize; //当前分配的存储容量以一数据元素存储长度为单位

}SqList;

三、顺序存储结构的线性表操作及C语言实现:

顺序表的插入与删除操作:

序号 数据元素 序号 数据元素   序号 数据元素 序号 数据元素
1
2
3
4
5
6
7
8
9
 
 
 
12
13
21
24
28
30
42
77
 
 
 
 

 

 


<-25

 

1
2
3
4
5
6
7
8
9
 
 
 
12
13
21
24
25
28
30
42
77
 
 
 
 
1
2
3
4
5
6
7
8
9
 
 
 
12
13
21
24
28
30
42
77
 
 
 
 

 

 

->24

1
2
3
4
5
6
7
8
9
 
 
 
12
13
21
28
30
42
77
 
 
 
 
 
插入前n=8;插入后n=9;   删除前n=8;删除后n=7;

顺序表的插入算法

status ListInsert(List *L,int i,ElemType e) {

struct STU *p,*q;

if (i<1||i>L->length+1) return ERROR;

q=&(L->elem[i-1]);

for(p=&L->elem[L->length-1];p>=q;--p)

*(p+1)=*p;

*q=e;

++L->length;

return OK;

}/*ListInsert Before i */

顺序表的合并算法

void MergeList(List *La,List *Lb,List *Lc) {

ElemType *pa,*pb,*pc,*pa_last,*pb_last;

pa=La->elem;pb=Lb->elem;

Lc->listsize = Lc->length = La->length + Lb->length;

pc = Lc->elem =

(ElemType *)malloc(Lc->listsize * sizeof(ElemType));

if(!Lc->elem) exit(OVERFLOW);

pa_last = La->elem + La->length - 1;

pb_last = Lb->elem + Lb->length - 1;

while(pa<=pa_last && pb<=pb_last) {

if(Less_EqualList(pa,pb)) *pc++=*pa++;

else *pc++=*pb++;

}

while(pa<=pa_last) *pc++=*pa++;

while(pb<=pb_last) *pc++=*pb++;

}

顺序表的查找算法

int LocateElem(List *La,ElemType e,int type) {

int i;

switch (type) {

case EQUAL:

for(i=0;i<length;i++)

if(EqualList(&La->elem[i],&e))

return 1;

break;

default:

break;

}

return 0;

}

顺序表的联合算法

void UnionList(List *La, List *Lb) {

int La_len,Lb_len; int i; ElemType e;

La_len=ListLength(La); Lb_len=ListLength(Lb);

for(i=0;i<Lb_len;i++) {

GetElem(*Lb,i,&e);

if(!LocateElem(La,e,EQUAL))

ListInsert(La,++La_len,e);

}

}

三、C语言源程序范例

四、总结

线性表的顺序表示

顺序表的插入算法

顺序表的合并算法

更多文章 更多内容请看ASP.NET教程  FreeBSD使用教程  数据结构专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
综艺读书宗旨
相关专题
·数据结构 (168篇文章)
·ASP.NET教程 (6605篇文章)
·FreeBSD使用教程 (5185篇文章)
·数据结构教程 (67篇文章)
·数据结构相关文章 (168篇文章)
热点标签: 数据结构  存储  c语言  c++  
最新技术文档
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容
Web 全站
综艺电脑频道编辑信箱  告诉我们您想看的专题或文章

Google

友情互链 | 收藏本站 | 联系我们 | 在线留言 | 京ICP备08008424号|