《数据结构》复习重点精品资料.doc
《《数据结构》复习重点精品资料.doc》由会员分享,可在线阅读,更多相关《《数据结构》复习重点精品资料.doc(113页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构复习重点第一章 绪论要求、目标:了解数据逻辑结构的分类;掌握算法的特性及估算算法时间复杂度的方法;熟悉数据结构的基本基本概念和术语。一、 基本概念和术语1数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。2数据:是对客观事物的符号表示,即所有能输入到计算机中并被计算机程序处理的符号的总称。3数据项:数据的不可分割的最小单位。4数据元素(数据结点):数据的基本单位,在程序中作为一个整体处理,由若干数据项组成。5数据对象:性质相同的数据元素的集合,是数据的一个子集如:四季对象是集合:春,夏,秋,冬自然数对象是集合:0,1,2,3,字母字符对象是
2、集合 :A,B,Z6数据结构的分类:线性结构和非线性结构。7数据结构的形式化定义:数据结构是一个二元组,可定义为Data_Structure=(D,S)其中:D是数据元素的有限集合,S是D上关系的有限集合8序偶:两个元素间的前后关系。a是b的前驱结点,b是a的后继结点例:四季的描述 B=(D,R) D=春,夏,秋,冬 R=,9物理结构(存储结构或映像):数据结构在计算机中的表示。10存储结构的分类: 顺序存储结构:利用元素的相对位置来表示元素间的位置关系,是一种随机存取结构,逻辑上相邻的数据物理上也紧临,静态分配空间; 链式存储结构:借助元素存储的指针来表示元素之间的关系,逻辑上相邻的数据物理
3、上不一定紧临,动态分配空间。11逻辑结构和物理结构的关系:是密切相关的两个方面,任何一个算法的设计取决于逻辑结构,而算法的实现则依赖于采用的存储结构。12数据类型:是一个值的集合和定义在这个值集上的一组操作的总称,规定了在程序执行期间变量或表达式所有可能取值的范围,以及在这些值上允许进行的操作。二、 算法和算法分析 1算法:是对特定问题求解步骤的一种描述,它是指令的有限序列。 2算法的特性:有穷性:算法在执行有究步之后结束,每一步在有穷时间内完成。确定性:每一条指令必须有确切的含义,不应产生二义性,相同的输入只能得出相同的输出。可行性:一个算法可以通过已经实现的基本运算执行有限次来实现。输入性
4、:一个算法有零个或多个输入。输出性:一个算法有一个或多个输出。 3算法分析考虑的方面: 正确性 可读性 健壮性 效率与低存储量需求 4语句频度:一条语句被执行的次数5渐近时间复杂度:所有语句频度之和,主要考虑嵌套最深语句的频度,若频度为多项式取指数最高的一项去掉系数即为渐近时间复杂度。 T(n)=O(f(n)-f(n)为时间复杂度值例:(1)+x; s=0; -O(1) (2)for( i=1; i=n; i+ )+x; s+=x -O(n) (3)for( j=1; j=n; j+ ) -O(n2) for( k=1; k=n; k+ )+x; s+=x; (4)for(j=1; jn; j
5、+) y=y+1; -频度:n-1 for(k=0; k=(2*n); j+)x+; -频度:(n-1)*(2n+1) -时间复杂度为O(n2) 6算法分析的两个主要方面:空间复杂度和时间复杂度。第一章 复习题一、填空1、数据结构被形式地定义为(D,S),其中D是 数据元素 的有限集合,S是 D上关系 的有限集合。2、数据结构是一门研究非数值计算的程序设计问题中计算机的 数据元素 以及它们之间的 关系 和运算等的学科。3、在数据结构中,逻辑上可以把数据结构分成 线性结构 和 非线性结构 。二、选择1、算法必须具备的五个特性是( B )。A输入性、输出性、可执行性、可移植性和可扩充性B输入性、输
6、出性、可行性、确定性和有穷性C输入性、输出性、确定性、有穷性和稳定性D输入性、输出性、可行性、稳定性和安全性2、算法分析的两个主要方面是( A )。A空间复杂度和时间复杂度 B正确性和可读性C简单性和文档性 D数据复杂性和程序复杂性三、计算,求下列算法的渐近时间复杂度及带语句的频度1void sort(int *x,int n) int i,j,k,t; for(i=1,i=n-1;i+) k=i; for(j=i+1;jxk)k=j; if(k!=i)t=xi;xi=xk;xk=t; 解:语句频度为: 渐近时间复杂度:O(n2)2sum(int n); int sum=0,i,j; for(
7、i=1;i=n;i+) p=1;for(j=1;j=i;j+)p*=j; sum+=p; return sum;解:语句频度为: 渐近时间复杂度:O(n2) 3sum(int n)int i,sum=0;for(i=1;i=n;i+)sum+=i; printf(“%d”,sum); 解:语句频度为: n 渐近时间复杂度:O(n)第二章 线性表要求、目标:了解线性表的基本概念;掌握顺序存储和链式存储结构的描述方法;掌握循环单链表、双链表的特点一、线性表概述1线性表:具有相同类型的n个数据元素的有限序列,可表示为(a1,a2,an)2线性表长度:数据元素个数n。3空线性表:长度为零的线性表。4关
8、键字/键:能惟一标识元素的字段。5相邻元素关系:ai为ai+1前驱元素,ai+1为ai后继元素,存在序偶关系。a1无前驱元素,an无后继元素。例:字母表:(A,B,C,Z) 学生成绩表:(790631,790632,790645)每个元素为一条记录,由若干数据项组成,线性表中可只写关键字。二、线性表的顺序存储1顺序存储:线性表的各个元素依次存储在一组地址连续的存储单元里。2元素位置确定:LOC(ai)=LOC(a1)+(i-1)*L 其中a1为线性表第一个元素的存储位置,L为每个元素所占字节数。 例:已知a1的地址为1000,每个元素占2字节,求a5的地址LOC(a5)=1000+(5-1)*
9、2=10083顺序表的特点(1)是一种随机存取的存储结构(2)逻辑上相邻的元素物理位置必定紧邻(3)存储空间是静态分配的(4)适用于事先能确定线性表的大小,存取速度快(5)插入和删除操作时需移动大量的元素,4插入或删除元素时移动次数(1)向含有n个元素的线性表第i个位置插入元素,需移动n-i+1次元素,平均移动次(2)删除含有n个元素的线性表第i个位置的元素,需移动n-i次元素,平均移动次5存储结构的描述#define list_max 100typedef structint datalist_max; int len;sqlist;6顺序结构线性表的运算(1)线性表的初始化void Ini
10、tList(sqlist *L)L.len=0;(2)求线性表的长度int ListLen(sqlist *L)return L.len;(3)在线性表中查询某个个结点,返回结点在线性表中的位置int search( int x; sqlist *L; int n ) int i;for( i=0; in; i+)if(x=L.datai) break; if( i=n)return(0); return(i+1); (4)在顺序线性表中第I个位置前插入一新元素 int insert_sq(sqlist *L; int i; int e) int p;if( iL.len) return 1;
11、if( L.lenlist_max-1) return 2;for( p=L.len; pi; p- )L.datap=L.datap-1; L.datai=e; L.len+; return 0;(5)在顺序线性表中删除第i个元素 int delete_sq(sqlist *L,int i) int p;if(iL.len) return 1;for( p=i+1; pL.len; p+)L.datap-1=L.datap;L.len-;return 0;(6)合并两个递增有序的顺序线性表,合并后仍为递增有序int mergelist(sqlist *LA,sqlist *LB,sqlist
12、 *LC)int I=0,j=0,k=0;while(ILA.len&jLB.len)if(LA.dataILB.dataj)LC.datak+=LA.dataI+;else if(LA.dataI=LB.dataj)LC.datak+=LA.dataI+;LC.datak+=LB.dataj+;elseLC.datak+=LB.dataj+;while(ILa.len)LC.datak+=LA.dataI+;while(jdata=x;r-next=p;r=p;scanf(“%d”,&x);r-next=NULL;return(h);12建立带头结点的单链表,在表头插入,以-1结束NODE
13、*creat( )NODE *h,*p;int x;h= (NODE *)malloc(sizeof(NODE);h-next=NULL;scanf(“%d”,&x);while(x!=-1)p=(NODE *)malloc(sizeof(NODE);p-data=x;p-next=h-next;h-next=p;scanf(“%d”,&x);return(h);13在单链表第I个结点前插入一个元素int insert_L(NODE *h,int I,int x)NODE *p=h, *s;int j=0;s=(NODE *)malloc(sizeof(NODE);s-data=x;while
14、(p!=NULL&jnext; j+;if(!p|jI-1)return 1;s-next=p-next;p-next=s;return 0;14删除单链表中第I个结点int delete_L(NODE *h, int I, int *e) NODE *p=h, *q;int j=0;while(p-next&jnext; j+;if(!(p-next)|jI-1)return 1;q=p-next;*e=q-data;p-next=q-next;free(q);return 0;15查找与给定值相同的第一个结点NODE *locatenode(NODE *h, int key)NODE *p
15、=h-next;while(p&p-data!=key)p=p-next;return p;16合并两个递减有序的链表,合并后仍为递减有序NODE *merge_L(NODE *ha, NODE *hb)NODE *p=ha-next, *q=hb-next, *r, *s;s=(NODE *)malloc(sizeof(NODE);s-next=NULL;r=s;while(p!=NULL&q!=NULL)if(p-dataq-data)r-next=p; r=p; p=p-next;elser-next=q; r=q; q=q-next;if(p=NULL) r-next=q; else
16、r-next=p; return s;(二)循环链表1定义:最后一个结点的指针域指向链表的头结点或第一个结点。2优点:解决了无法从指定结点到达该结点的前驱结点的问题。3结构:a0nextnextan-1、nexta1nextnextha0nextnextan-1、nextnextnexth4判别是否为空1)带头结点:当h-next=h 时为空2)不带头结点:当h=NULL时为空5删除第一个结点1)带头结点:h-next=h-next-next2)不带头结点:h=h-next6建立循环链表将尾结点r-next=NULL;改为r-next=h;(三)双向链表1特点:两个指针域,可用于表示树型结构,
17、一个指向前驱,一个指向后继2结点类型:typedef struct dnodeint data;struct dnode *prior, *next;DNODE;3结构:h 4建立双链表(以0结束)DNODE *creatd()DNODE *h, *p, *q;int x;h=p=(*DNODE)malloc(sizeof(DNODE);scanf(“%d”,&x);while(x!=0)q=(*DNODE)malloc(sizeof(DNODE);q-data=x;p-next=q;q-prior=p;p=q;scanf(“%d”,&x);p-next=NULL; h-prior=NULL;
18、return h;5在双链表的第I个结点之后后插入一新结点 void insertd(DNOD *h,int I, int x) DNODE *s, *p;int j;s=(DNODE *)malloc(sizeof(DNODE);s-data=x;if(I=0)s-next=*h; *h-prior=s; *h=s; *h-prior=NULL;elsep=*h;j=1;while(p!=NULL&jnext;if(p!=NULL)if(p-next=NULL)p-next=s; s-prior=p; s-next=NULL;elses-next=p-next; p-next-prior=s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 数据结构复习重点 精品资料 复习 重点 精品 资料
限制150内