16数据机构知识点复习整理.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
16数据机构知识点复习整理

2016秋季学期《数据结构》期末复习2016-12-27数据结构研究的内容是什么?数据结构是一门研究非数值计算程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。它的主要研究范围如下:数据元素之间固有的逻辑关系——数据逻辑结构;数据元素及关系在计算机内的表示——数据存储结构;对数据结构的操作——算法。算法性能的度量:时间和空间复杂度,大O表示法的含义。常见的时间复杂度常数阶时间复杂度为常数,不随问题规模n的大小而改变。记T(n)=O(1)。线性阶时间复杂度与问题规模n成线性关系。记T(n)=O(n)。如一次for()循环里面做一次简单的加法运算。平方阶和立方阶时间复杂与问题规模n成平方或立方关系。记 或 对数阶时间复杂度与问题规模n成对数关系,通常以2为底。记 如:void print(int n){int i;for(i=1;in;i*=2) printf(“%d\t”,i);}对输出语句执行了 次,有 ,即 其他时间复杂度还有指数阶 ,阶乘阶 等时间复杂度之间的关系: 线性表的顺序和链式存储结构各自的特点;顺序优缺点优点比较简单。可以实现随机存放,存取速度快。每个结点只需存储元素本身信息,不需额外空间。缺点需要占用一片连续的存储空间,并且需要事先估计存储空间的大小。如果空间分配得太大,有可能用不完从而造成浪费。如果空间分配得小,又有可能不够用。做插入和删除操作时,需要移动大量的元素,效率较低。链式优缺点优点不需要占用连续的存储空间,其存储空间是动态分配的,在使用链表前不用事先估计存储空间的大小。在插入和删除操作时,不需要移动大量元素。虽然链表的插入和删除操作的时间复杂度与顺序表的插入和删除操作一样,都是 。但一个是比较操作,一个是移动操作。显然二者所花费的时间不可同日而语。缺点操作算法较复杂不能随机存放。一般情况下,查找结点要从头指针开始,遍历链表。需要额外的空间来表示元素间的关系,空间代价较高结论顺序存储结构比较适合于线性长度不经常发生变化,不经常进行插入和删除操作,经常进行存取和查询操作。链式存储结构比较适合于线性表长度不可预知,需要频繁进行插入和删除操作。内存示意图;初始化;顺序表//初始化线性表,表的初始最大空间数为sizebool InitList(List L, int size) { L.elem = (ElemType *)malloc(sizeof(ElemType) * size); L.maxSize = size; L.length = 0; return true;}链式表//初始化空表---创建表头bool InitList(List L) {L.head = (LNode *)malloc(sizeof(LNode));L.head-next = NULL;L.len = 0;return true;}//用数组初始化链表bool InitList(List L, ElemType data[] , int n) {for (int i = n - 1;i = 0;i--) {LNode *p = (LNode *)malloc(sizeof(LNode));p-elem = data[i];p-next = L.head-next;L.head-next = p;}L.len = n;return true;}插入、删除;顺序表// 定位插入元素: 1 = i = length + 1bool ListInsert(List L, int i, ElemType e) {if (i 1 || i L.length+1) return false;if(L.length = L.maxSize) {ElemType *newbase = (ElemType *)realloc(L.elem, (L.maxSize+LISTINCREMENT)*sizeof(ElemType)); if (!newbase) return false; L.elem = newbase;L.maxSize += LISTINCREMENT;}ElemType *q = (L.elem[i-1]);for (ElemType *p = (L.elem[L.length-1]); p = q; --p) *(p+1) = *p;*q = e;++L.length;return true; }// 定位删除元素:1 = i = lengthbool ListDelete(List L, int i, ElemType e);bool ListDelete(List L, int i, ElemType e) {if ((i 1) || (i L.length)) return false;

文档评论(0)

yaobanwd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档