复习提纲第一章数据结构概述基本概念与术语(P3)1.数据结构是一门研究非数值计算程序设计问题中计算机的操作对象以及他们之间的关系和操作的学科.2.数据是用来描述现实世界的数字,字符,图像,声音,以及能够输入到计算机中并能被计算机识别的符号的集合2.数据元素是数据的基本单位3.数据对象相同性质的数据元素的集合4.数据结构三方面内容:数据的逻辑结构.数据的存储结构.数据的操作.(1)数据的逻辑结构指数据元素之间固有的逻辑关系.(2)数据的存储结构指数据元素及其关系在计算机内的表示(3)数据的操作指在数据逻辑结构上定义的操作算法,如插入,删除等.5.时间复杂度分析--------------------------------------------------------------------------------------------------------------------1、名词解释:数据结构、二元组2、根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、线性结构、树形结构和图状结构四种类型。3、常见的数据存储结构一般有四种类型,它们分别是___顺序存储结构_____、___链式存储结构_____、___索引存储结构_____和___散列存储结构_____。4、以下程序段的时间复杂度为___O(N2)_____。inti,j,x;for(i=0;in:i++)n+1for(j=0;jn;j++)n+1x+=i;------------------------------------------------------------------------------------------------------------------第二章线性表1.顺序表结构由n(n=0)个具有相同性质的数据元素a1,a2,a3……,an组成的有穷序列//顺序表结构#defineMAXSIZE100typedefintDataType;Typedefstruct{DataTypeitems[MAXSIZE];Intlength;}Sqlist,*LinkList;2.单链表(1)链表结点结构//链表的节点结构TypedefstructNode{intdata;structNode*next;}Lnode,*Pnode,*LinkList;(2)结点遍历voidTraverseList(LinkListt){LinkListp;while(t){p=t;t=t-nextfree(p);}}(3)链表操作算法:初始化、插入、输出、删除voidInitList(LinkList*h){*h=(LinkList)malloc(sizeof(LNode));if(!h){print(“初始化错误”);return;}(*h)-next=NULL;}voidInsertList(LinkListh,intpos,datatypex){LinkListp=h,q;inti=0;while(p&&ipos-1){p=p-next;i++;}if(!p||ipos-1)print(“插入位置出错!!”);InitList(&q);q-next=NULL;q-data=x;}voidDeleteList(LinkListh,intpos){LinkListp=h,q;inti=0;while(p&&ipos-1){p=p-next;i++;}if(!p||ipos-1){cout”删除位置错误”;return;}q=p-next;p-next=q-next;free(q);}-----------------------------------------------------------------------------------------------------------------1、线性表中,第一个元素没有直接前驱,最后一个元素没有直接后驱。2、在一个单链表中,若p所指结点是q所指结点的前驱结点,则删除结点q的操作语句为p-next=q-next;free(q);。3、在长度为N的顺序表中,插入一个新元素平均需要移动表中n/2个元素,删除一个元素平均需要移动(n-1)/2个元素。4、若线性表的主要操作是在最后一个元素之后插入一个元素或删除最后一个元素,则采用___带头结点的双循环链表__存储结构最节省运算时间。5、已知顺序表中每个元素占用3个存储单元,第13个元素的存储地址未336,则顺序表的首地址为___300_____。6、设有一带头结点单链表L,请编写该单链表的初始化,插入、输出和删除函数。(函数名自定义)----------------------------------------------------------------------------------------------------------------voidInitList(LinkList*L){(*L)=(LinkList)malloc(sizeof(LNode));if(!L){cout”初始化失败!”;return;}(*L)-next=NULL;}voidInsertList(LinkListL,intpos,DataTypex){LinkListp=L,q;inti=0;while(p&&ipos-1){p=p-next;i++;}if(!p||ipos-1){cout”插入位置错误”;return;}InitList(&q);q-next=p-next;p-next=q;q-data=x;}voidTraverseList(LinkListL){LinkListt;while(L){t=L;L=L-next;free(t);}}voidTraverseList(LinkListL){LinkListt=L;while(L){t=t-next;coutt-data””;}coutendl;}voidDeleteList(LinkListL,intpos){LinkListp=L,q;inti=0;while(p&&ipos-1){p=p-next;i++;}if(!p||ipos-1){cout”删除位置错误!!”;return;}q=p-next;p-next=q-next;free(q):}第三章栈和队列1.栈(1)栈的结构与定义(2)顺序栈操作算法:入栈、出栈、判断栈空等(3)链栈的结构与定义2.队列(1)队列的定义----------------------------------------------------------------------------------------------------------------1、一个栈的入栈序列为“ABCDE”,则以下不可能的出栈序列是()A.BCDAEB.EDACBC.BCADED.AEDCB2、栈的顺序表示仲,用TOP表示栈顶元素,那么栈空的条件是()A.TOP==STACKSIZEB.TOP==1C.TOP==0D.TOP==-13、允许在一端插入,在另一端删除的线性表称为____队列____。插入的一端为____队尾____,删除的一端为_____队头___。4、栈的特点是____先进后出____,队列的特点是____先进先出____。5、对于栈和队列,无论他们采用顺序存储结构还是链式存储结构,进行插入和删除操作的时间复杂度都是____O(1)____。6、已知链栈Q,编写函数判断栈空,如果栈空则进行入栈操作,否则出栈并输出。(要求判断栈空、出栈、入栈用函数实现)voidEmptyStack(LinkStackQ){LinkStackt;charx=a;//假设链栈存储字符型数据if(Q-next){t=Pop(Q,x);coutt-data;}elsePush(Q,x);基本概念数据结构的研究对象是什么?数据,数据元素(数据结构中讨论的基本单位、数据整体中相对独立的单位、数据元素的特点:相对性),数据结构,数据类型和抽象数据类型,数据对象数据结构是什么?定义:数据元素以及它们之间存在一种或多种特定的关系。特点:数据元素集合相同,而其上的关系不同,则构成的数据结构不同。逻辑结构是什么?主要有哪几类?逻辑结构:对数据元素之间存在的逻辑关系的描述,它可以用一个数据元素的集合和定义在此集合上的若干关系表示。存储结构是什么?存储结构:是数据逻辑结构在计算机中的表示和实现,故又称数据物理结构。什么是算法?定义:是对问题求解过程的一种描述,是为解决一个或一类问题给出的一个确定的、有限长的操作序列。五大特性:有穷性、确定性、可行性、输入、输出线性表线性表的定义?线性表是由n(n≥0)个属性相同数据元素a1,a2…an组成的一个有限序列,线性表或是空表,或可以表示为A=(a1,a2,…,ai,…,an)其中ai(i=1,2,…,n)是线性表中的一个元素。如何在顺序存储结构表示的线性表中实现插入元素操作?intinsertElement(List_Array*list_ptr,char*element){//把新字符串插入到线性表的最后位置if(list_ptr-count==LISTMAX)return(-1);//到达最大大小else{strcpy(list_ptr-list[list_ptr-count],element);list_ptr-count++;//下一个元素return(1);//成功返回}}如何在顺序存储结构表示的线性表中实现元素删除操作?intdeleteElement(List_Array*list_ptr,intpos){intk;//检查下标pos位置上是否存在数据if(pos0||poslist_ptr-count-1)return(-1);//出错else{//将pos位置后所有元素向前移动for(k=pos;klist_ptr-count-1;k++)strcpy(list_ptr-list[k],list_ptr-list[k+1]);list_ptr-count--;return(1);//删除成功}}如何在顺序存储结构表示的线性表中找到元素后继?物理地址上紧接着该元素后一个级即该元素的后继用数组的下标加1即可找到.如何在顺序存储结构表示的线性表中找到元素前驱?物理地址上紧接着该元素前一个即该元素的前驱用数组下标减1即可找到链表什么是链接存储结构?通过指针管理的一组存储单元,(这组存储单元的内存地址可以是连续的,也可以是不连续的)。链接存储结构中的每个存储单元称为“结点”,结点包含一个数据域和一个指针域;链接存储结构中的结点通过指针域指示后继结点的内存地址;访问链接存储结构通常由第一个结点开始,逐一访所有结点。如何将新结点添加到单链表中?表头位置①Node*t=newNode;②t-Data=d;③t-next=head;④head=t;表尾位置①Node*t=newNode;②t-data=d;③last-next=t;④last=t;两个结点中间查找单链表中指定结点?设置一个跟踪链表结点的指针p,初始时p指向链表中的第一个结点,然后顺着next域依次指向每个结点,每指向一个结点就判断其是否等于指定结点,若是则返回该结点地址。否则继续往后搜索,直到p为NULL,表示链表中无此元素,返回NULL。算法的时间复杂度为O(n)。如何删除单链表中的结点?要删除链表中第i个结点,首先在单链表中找到删除位置i-1前一个结点,并用指针p指向它,指针t指向要删除的结点。将指针p所指结点的指针域修改为所t指结点的后继结点的地址。从链表中删除链接关系后的结点需动态的释放(delete)。Node*t,*p;①t=p-next;②p-next=t-ne