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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构知识点整理清华大学出版社Word格式.docx

1、 /存储空间基址 int length; / int listsize; / SqList;SqList La,Lb,Lc;Status InitList_Sq(SqList &L)/构造空线性表L L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType) if(L.elem=0) exit(OVERFLOW);L.length=0; /初始化表长为0,“空”表 L.listsize=LIST_INIT_SIZE;/初始化存储容量 return(OK);/InitList_Sqvoid ListDelete(SqList &L,int i

2、,ElemType &e)/在顺序表L中删除第个元素,用返回其值/i的合法值是1,ListLength(L) if(iL.length) return ERROR;/删除位置不合理 ElemType *p=&L.elemi-1,*q=L.elem+L.length-1; e=*p; while(p=L.listsize) /表满,增加存储容量ElemType*newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)if(!newbase) exit(OVERFLOW); L.elem=newba

3、se;L.listsize+=LISTINCREMENT; ElemType *q=&L.elemi-1, *p=&L.elemL.length-1; while(p=q) *(p+1)=*p; -p; /插入位置后的元素右移 *q=e; +L.length; return OK;/ListInsert_S线性表相关程序:typedef struct LNode ElemType data; /数据域 struct LNode * next; /指针域LNode,*LinkList;/默认带头结点,需说明LNode node1; LinkList La;Status GetElem_L(Lin

4、kList L,int i,ElemType &/L为带头结点的单链表的头指针。第i个元素存在时,其值赋给e并返回OK,否则返回ERROR LNode *p=L-next; /p指向”第1个”结点,int j=1; / j为指向结点的位序 while(p&j+j; if(!p)return ERROR; /第i个元素不存在 e=p-data; /取第i个元素 return OK;Status ListInsert_L(LinkList &L, int i, ElemType e)/向链表L中第i个位置插入eLNode *p=L; int j=0; /*p始终指向第j个结点*/while(p&i

5、-1)p=p- +j;/寻找第i-1个结点 p) return ERROR; LNode *temp; temp=(LNode *)Malloc(sizeof(LNode);temp) exit(OVERFLOW); temp-data=e; temp-next=p- p-next=temp; return(OK);/ListInsert_LStatus ListDelete_L(LinkList &L, int i, ElemType & LNode *p=L,*q;/寻找第i-1个结点,j 最终为i-1,除非到表尾p空p|!p-next) return ERROR;/第i个或更前结点不存在

6、q=p- e=q- p-next=q- free(q); return(OK);/ListDelete_LStatus CreateList_L(LinkList &L, int n)/逆位序输入n个元素的值,建立带头结点的单链表L。LNode *p;L=(LinkList) malloc(sizeof(LNode);L-next=NULL;for(int i=1;inext=p;/插入到表头/CreateList_L相关两表的归并void MergeList_Sq (SqList La,SqList Lb,Sqlist &Lc)/归并非降顺序表La与Lb构成非降顺序表LcLc.listsiz

7、e=Lc.length=La.length+Lb.length;Lc.elem=(ElemType*) malloc(Lc.listsize*sizeof(ElemType);If(!Lc.elem) exit(OVERFLOW); /存储分配失败ElemType *pa=La.elem, *pb=Lb.elem, *pc=Lc.elem;ElemType *pa_last=La.elem+La.listsize-1;ElemType *pb_last=Lb.elem+La.listsize-1;while(pa=pa_last&pb=pb_last)/归并 if(*pa=*pb) *pc+=

8、*pa+; else *pc+=*pb+;pa_last) *pc+=*pa+; /插入La剩余段while(pbpb_last) *pc+=*pb+; /插入Lb剩余段/MergeList_SqStatus ListMerge_SortedL(SortedSqList La,SortedSqList Lb,SortedSqList &/将两个有序顺序表La与Lb归并为有序顺序表Lcint la_len=ListLength_Sq(La);int lb_len=ListLength_Sq(Lb); int i=1,j=1,k=1; ElemType a,b; InitList_Sq(Lc);

9、while(i=la_len&=lb_len) /归并 GetElem_Sq(La,i,a);GetElem_Sq(Lb,j,b); if(ab) ListInsert_Sq(Lc,k+,a);+i; else ListInsert_Sq(Lc, k+,b); while(i=la_len) /插入La的剩余元素 GetElem_Sq(La,i+,a); ListInsert_Sq(Lc, k+,a); while(j=lb_len) /插入Lb的剩余元素 GetElem_Sq(Lb,j+,b); ListInsert_Sq(Lc,k+,b); return OK;/复杂度 O(ListLen

10、gth(La)+ListLength(Lb),因只在表尾插入)3. 注意链表中next指针的应用,如插入,删除等操作各个元素的链接。4. 顺序表的就地逆置思路:分别设两个指针p与q指向第一个和最后一个元素,当p L-while(p!=NULL) q=p- /令q指向p的后继结点,以便以后p后移接下来两句将p所指向节点插入到头结点后 p=q;/q后移有序顺序表插入Status ListInsert_SortedSq(SqList &L,ElemType e)/在非降顺序表L中插入元素e,使得L中各元素仍然非降。注意插入位置据e求得/思路:从最后一个元素开始,只要它比待插入元素大就后移。条件不成立

11、时退出循环,将e插入当前位置后即可。顺序表插入操作莫忘表满的处理。只要是顺序表的插入操作就需要判断是否表满,对于链表则无此要求if(L.length/表满,增加存储容量ElemType *newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType); if(! L.listsize+=LISTINCREMENT; /下面从最后一个元素开始,只要大于e就后移,最后插入当前位置后 p=L.elem+L.length-1; while(p=L.elem&*pe)*(p+1)=*p;-p; *(p+1)=e

12、; +L.length; /表长加15. 循环链表、双向链表、双向循环链表的特点和基本操作。主要是插入删除的相关指针操作。/-线性表的双向(循环)链表存储结构-typedef struct DuLNode ElemType data; struct DuLNode *prior; struct DuLNode *next;DuLNode,*DuLinkList;Status ListInsert_DuL(DuLinkList &/在带头结点的双向链表L的第i个位置插入e,1i表长+1 DuLNode *p=L; while(j s=(DuLNode *)malloc(sizeof(DuLNod

13、e);s)exit(OVERFLOW); s-prior=p;s- /记:注意分析指针改变next-prior=s;next=s; /次序对结果的影响 另外看下多项式的相关课件,老师复习提纲上有写这方面的代码。第三章 栈和队列1. 栈(Stack)是定义在线性结构上的抽象数据类型,其操作类似线性表操作,但元素的插入、删除和访问都必须在表的一端进行,为形象起见,称允许操作端为栈顶(Top),另一端为栈底(base),注意Top指向待插入位置。特性:Last In First Out后进先出/总是访问最近插入的一个/按插入顺序倒着访问。#define STACK_INIT_SIZE 100#def

14、ine STACKINCREMENT 10typedef ? SElemType;/栈元素类型 SElemType *base; /栈底指针 SElemType *top; /栈顶指针 int stacksize; /栈容量 SqStackStatus InitStack(SqStack &S)/构造空栈S S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);S.base)exit(OVERFLOW); S.top=S.base; /空栈 S.stacksize=STACK_INIT_SIZE;/InitStack 复杂度”O

15、(1)”Status DestroyStack(SqStack &/销毁栈S free(S.base); S.base=NULL; S.top=NULL; S.stacksize=0; /复杂度O(1)Status ClearStack(SqStack &/置S为空栈 S.top=S.base;Status Push(SqStack &S, SElemType e)/插入e为栈顶元素 if(S.top-S.base=S.stacksize)/判断栈满/栈满则应重新分配空间 S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMEN

16、T)*sizeof(SElemType);S.base) exit(OVERFLOW); S.top=(S.base+S.stacksize);/使得S.top重新指向栈顶,因realloc S.stacksize+=STACKINCREMENT; *S.top +=e; /top指向待插入位置 /Push ,复杂度O(1)Status Pop(SqStack &S,SElemType &/若栈不空则栈顶元素出栈并用e带回其值 if(S.top=S.base) return ERROR;/判断栈空 e=*(-S.top); /栈顶元素为*(S.top-1)Status StackEmpty(S

17、qStack S)if(S.top=S.base) return TRUE;else return FALSE;int StackLength (SqStack S) return (S.top-S.base);Status GetTop(SqStack S,SElemType & e=*(S.top-1); /注意top指向待插入位置栈的遍历一直没用到,可以自己找找课件看。2. 队列类似线性表和栈,也是定义在线性结构上的ADT,与线性表和栈的区别在于,元素的插入和删除分别在表的两端进行。类似日常生活中排队,允许插入的一端为队尾(rear),允许删除端称队头(front)。First In F

18、irst Out先进先出,如操作系统中的作业队列和打印任务队列、日常生活中各类排队业务等均可用队列模拟。#define * QElemType typedef struct QNode QElemType data; struct QNode *next; QNode, *QueuePtr;typedef struct QueuePtr front;/队头指针 QueuePtr rear; /队尾指针 LinkQueue;/ 链队列Status InitQueue (LinkQueue &Q)/ 构造一个空队列Q Q.front=Q.rear=(QueuePtr)malloc(sizeof(Q

19、Node); if (!Q.front) exit (OVERFLOW); Q.front-next = NULL; /莫忘! /时间复杂度O(1)Status DestroyQueue (LinkQueue &Q) /销毁队列Q,此处不同于教材,先清空元素结点,后释放头结点 QueuePtr p=Q.front- while(p)/依次释放首元素至最后一个元素 Q.front-free(p);p=Q.front- free(Q.front); Q.front=NULL;Q.rear=NULL;/去掉下划线部分为置空操作, 复杂度O(n) Status EnQueue (LinkQueue &

20、Q, QElemType e) / 插入元素e为Q的新的队尾元素 QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode);p) exit(OVERFLOW);/存储分配失败data = e;/莫忘! Q.rear-next = p; Q.rear = p; /复杂度O(1)Status DeQueue (LinkQueue &Q, QElemType &e) / 若队列不空,则删除Q的队头元素,用 e 返回其“值” if (Q.front =Q.rear) return ERROR;/空队列 QueuePtr p= Q.front- e = p-next = p- if(Q.rear = p) Q.rear=Q.front;/只1个结点时改尾指针 free (p);/复杂度O(1)3. 循环队列#define MAXQSIZE 100 /最大队列长度 QElemType *base;/ 动态分配存储空间 int front; / 头指针,队列不空则指向队列头元素 int rear; / 尾指针, 指向待插入元素位置 SqQueue;Status InitQueue (SqQueue

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

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