ImageVerifierCode 换一换
格式:DOCX , 页数:53 ,大小:330.17KB ,
资源ID:27044575      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27044575.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(大数据结构C语言2.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

大数据结构C语言2.docx

1、大数据结构C语言2第二章 线性表本章的重点:掌握顺序表和单链表上实现的各种基本算法及相关的时间性能分析;难点:使用本章所学的基本知识设计有效算法解决与线性表相关的应用问题。要求达到“识记”的内容:线性表的逻辑结构特征,线性表上定义的基本运算,并利用基本运算构造出较复杂的运算。要求达到“综合应用”的内容:顺序表的含义及特点,顺序表上的插入、删除操作,解决简单应用问题。链表如何表示线性表中元素之间的逻辑关系;单链表、双链表、循环链表链接方式上的区别;单链表上实现的建表、查找、插入和删除等基本算法及其时间复杂度。循环链表上尾指针取代头指针的作用,以及单循环链表上的算法与单链表上相应算法的异同点。双链

2、表的定义和相关算法。利用链表设计算法解决简单应用问题。要求达到“领会”的内容:顺序表和链表的比较,以及如何选择其一作为其存储结构才能取得较优的时空性能。线性结构的特点:在数据元素的非空有限集中, 存在唯一的一个被称做“第一个”的数据元素; 存在唯一的一个被称做“最后一个”的数据元素; 除第一个之外,集合中的每个数据元素均只有一个前驱; 除最后一个之外,集合中每个数据元素均只有一个后继。2.1线性表的逻辑结构一、线性表的定义线性表是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。数据元素可以是一个数、一个符号、也可以是一幅图、一页书或更复杂的信息。线性表例:1、12345672

3、、3、学号姓名语文数学C语言6201001张三8554926201002李四9284646201003王五8774736201004.数据元素也可由若干个数据项组成(如上例3)。这时常把数据元素称为记录。含有大量记录的线性表又称文件。线性表中的数据元素类型多种多样,但同一线性表中的元素必定具有相同特性,即属同一数据对象,相邻数据元素之间存在着序偶关系。a1.ai-1aiai+1.anai是ai+1的直接前驱元素,ai+1是ai的直接后继元素。线性表中元素的个数n定义为线性表的长度,为0时称为空表。在非空表中的每个数据元素都有一个确定的位置。ai是第i个元素,把i称为数据元素ai在线性中的位序。

4、二、线性表的类型定义 抽象数据类型线性表的定义如下:ADT List数据对象: D=ai| ai(-ElemSet,i=1,2,.,n,n=0 数据关系: R1=| ai-1,ai(- D,i=2,.,n 基本操作:InitList(&L)DestroyList(&L)ClearList(&L)ListEmpty(L)ListLength(L)GetElem(L,i,&e)LocateElem(L,e,compare()PriorElem(L,cur_e,&pre_e)NextElem(L,cur_e,&next_e) ListInsert(&L,i,e)ListDelete(&L,i,&e)

5、ListTraverse(L,visit() ADT List2、部分操作的类C实现:InitList(&L) L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType);if(!L.elem)exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;/InitListGetElem(L,i,&e) *e=L.lemi/GetElemListInsert(List &L,int i,ElemType e) if(iL.length+1) return ERROR;q=&(L

6、.elemi-1);for(p=&(L.elemL.length-1);p=q;-p) *(p+1)=*p;*q=e;+L.length;return OK;/ListInsertvoid union(List &La,List &Lb)/利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=AB。La_len=ListLength(La);Lb_len=ListLength(Lb);for(i=1;i=Lb_len;i+)GetElem(Lb,i,e);if(!LocateElem(La,e,equal)ListInsert(La,+La_len,e);/unionvoid

7、MergeList(List La,List Lb,List &Lc)/巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列。 InitList(Lc);i=j=1;k=0;La_len=ListLength(La);Lb_len=ListLength(Lb);while(i=La_len)&(jLb_len)GetElem(La,i,ai);GetElem(Lb,j,bj);if(ai=bj) ListInsert(Lc,+k,ai);+i; elseListInsert(Lc,+k,bj);+j;while

8、(k=La_len)GetElem(La,i+,ai);ListInsert(Lc,+k,ai);while(jlength=0;int ListLength(List *L) return L-length;void GetElem(List L,int i,ElemType *e) *e=L.elemi;int EqualList(ElemType *e1,ElemType *e2) if (strcmp(e1-name,e2-name) return 0; if (strcmp(e1-stuno,e2-stuno) return 0; if (e1-age!=e2-age) return

9、 0; if (e1-score!=e2-score) return 0; return 1;int LocateElem(List *La,ElemType e,int type) int i; switch (type) case EQUAL: for(i=0;ilength;i+) if(EqualList(&La-elemi,&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=ListLe

10、ngth(La); Lb_len=ListLength(Lb); for(i=0;iL-length+1) return ERROR; q=&(L-elemi-1); for(p=&L-elemL-length-1;p=q;-p) *(p+1)=*p; *q=e; +L-length; return OK;/*ListInsert Before i */main() struct STU e; List *La,*Lb; clrscr(); printf(nn-List Demo is running.-nn); printf(First is InsertList function.n);

11、init(&La); strcpy(e.name,stu1); strcpy(e.stuno,100001); e.age=80; e.score=1000; ListInsert(La,1,e); strcpy(e.name,stu2); strcpy(e.stuno,100002); e.age=80; e.score=1000; ListInsert(La,2,e); printlist(*La); printf(List A length now is %d.nn,La-length); getch(); strcpy(e.name,stu3); strcpy(e.stuno,1000

12、03); e.age=80; e.score=1000; ListInsert(La,3,e); printlist(*La); printf(List A length now is %d.nn,La-length); getch(); init(&Lb); strcpy(e.name,zmofun); strcpy(e.stuno,100001); e.age=80; e.score=1000; ListInsert(Lb,1,e); strcpy(e.name,bobjin); strcpy(e.stuno,100002); e.age=80; e.score=1000; ListIns

13、ert(Lb,2,e); strcpy(e.name,stu1); strcpy(e.stuno,100001); e.age=80; e.score=1000; ListInsert(Lb,3,e); printlist(*Lb); printf(List B length now is %d.nn,Lb-length); getch(); printf(Second is UnionList function.n); printf(Now union List A and List B.n); UnionList(La,Lb); printlist(*La); printf(List A

14、length now is %d.nn,La-length); getch(); clrscr();2.2 线性表的顺序表示和实现 存储结构逻辑结构“数据结构”定义中的“关系”指数据间的逻辑关系,故也称数据结构为逻辑结构。存储结构顺序数据结构在计算机中的表示称为物理结构。又称存储结构。链式 线性表的类型定义一、线性表的顺序表示用一组地址连续的存储单元依次存储线性表的数据元素。C语言中的数组即采用顺序存储方式。2000:00012000:00032000:00052000:00072000:00092000:00112000:00132000:00152000:0017.2000:1001200

15、0:1003000000000000000100000000000000100000000000000011000000000000010000000000000001010000000000000110000000000000011100000000000010000000000000001001a9123456789假设线性表的每个元素需占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则存在如下关系:LOC(ai+1)=LOC(ai)+lLOC(ai)=LOC(a1)+(i-1)*l式中LOC(a1)是线性表的第一个数据元素的存储位置,通常称做线性表的起始位置或基地

16、址。常用b表示。线性表的这种机内表示称做线性表的顺序存储结构或顺序映象。称顺序存储结构的线性表为顺序表。顺序表的特点是以元素在计算机内物理位置相邻来表示线性表中数据元素之间的逻辑关系。二、顺序存储结构的线性表操作及C语言实现:线性表的动态分配顺序存储结构#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef structElemType *elem; /存储空间基址int length; /当前长度int listsize; /当前分配的存储容量以一数据元素存储长度为单位SqList; 顺序表的插入与删除操作:序号数据元素序号数据

17、元素序号数据元素序号数据元素12345678912132124283042772412345678912132128304277插入前n=8;插入后n=9;删除前n=8;删除后n=7;顺序表的插入算法status ListInsert(List *L,int i,ElemType e) struct STU *p,*q; if (iL-length+1) return ERROR; q=&(L-elemi-1); for(p=&L-elemL-length-1;p=q;-p) *(p+1)=*p; *q=e; +L-length; return OK; /*ListInsert Before

18、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

19、_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;ielemi,&e) return 1; break; defa

20、ult: 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;iLb_len;i+) GetElem(*Lb,i,&e); if(!LocateElem(La,e,EQUAL)ListInsert(La,+La_len,e); 三、C语言源程序范例#include#include#include#define ERROR 0#define OK

21、1#define EQUAL 1#define OVERFLOW -1#define LIST_INIT_SIZE 100#define LISTINCREMENT 10struct STU char name20; char stuno10; int age; int score;stu50;typedef struct STU ElemType;struct LIST ElemType *elem; int length; int listsize;typedef struct LIST List;int init(List *L) L-elem=(ElemType *)malloc(LI

22、ST_INIT_SIZE*sizeof(ElemType); if(!L-elem) exit(OVERFLOW); L-length=0; L-listsize=LIST_INIT_SIZE; return OK;/*init */int ListLength(List *L) return L-length;void GetElem(List L,int i,ElemType *e) *e=L.elemi;int EqualList(ElemType *e1,ElemType *e2) if (strcmp(e1-name,e2-name)=0) return 1; else return

23、 0;int Less_EqualList(ElemType *e1,ElemType *e2) if (strcmp(e1-name,e2-name)=0) return 1; else return 0;int LocateElem(List *La,ElemType e,int type) int i; switch (type) case EQUAL: for(i=0;ilength;i+) if(EqualList(&La-elemi,&e) return 1; break; default: break; return 0;void MergeList(List *La,List

24、*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=

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1