数据结构算法背诵版.docx

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构算法背诵 一、线性表 逆转顺序表中的所有元素 算法思想:第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,……,依此类推。 void Reverse(int A[], int n) { int i, t; for (i=0; i n/2; i++) { t = A[i]; A[i] = A[n-i-1]; A[n-i-1] = t; } } 删除线性链表中数据域 为 item的所有结点 算法思想:先从链表的第 2 个结点开始,从前往后依次判断链表中的所有结点是否满足条件,若某个结点的数据域为 item,则删除该结点。最后再回过头来判断链表中的第 1 个结点是否满足条件,若 满足则将其删除。 void PurgeItem(LinkList list) { LinkList p, q = list; p = list-next; while (p != NULL) { if (p-data == item) { q-next = p-next; free(p); p = q-next; } else { q = p; p = p-next; } } if (list-data == item) { q = list; list = list-next; free(q); } } 逆转线性链表 void Reverse(LinkList list) { LinkList p, q, r; p = list; q = NULL; while (p != NULL) { r = q; q = p; p = p-next; q-next = r; } list = q; } 复制线性链表(递归) LinkList Copy(LinkList lista) { LinkList listb; if (lista == NULL) return NULL; else { listb = (LinkList)malloc(sizeof(LNode)); listb-data = lista-data; listb-next = Copy(lista-next); return listb; } } 将两个按值有序排列的非空线性链表合并为一个按值有序的线性链 表 LinkList MergeList(LinkList lista, LinkList listb) { LinkList listc, p = lista, q = listb, r; // lis指tc向 lista和 listb所指结点中较小者 if (lista-data = listb-data) { listc = lista; r = lista; p = lista-next; } else { listc = listb; r = listb; q = listb-next; } while (p != NULL q != NULL) { if (p-data = q-data) { r-next = p; r = p; p = p-next; } else { r-next = q; r = q; q = q-next; } } //将剩余结点(即未参加比较的且已按升序排列的结点)链接到整个链表后面 r-next = (p != NULL) ? p : q; return listc; } 二、树 二叉树的先序遍历(非递归算法 )算法思想:若 p 所指结点不为空,则访问该结点,然后将该结点的地址入栈,然后再将p 指向其左孩 子结点;若 p 所指向的结点为空,则从堆栈中退出栈顶元素(某个结点的地址),将 p 指向其右孩子 结点。重复上述过程,直到 p = NULL 且堆栈为空,遍历结束。 #define MAX_STACK 50 void PreOrderTraverse(BTree T) { BTree STACK[MAX_STACK], p = T; int top = -1; while (p != NULL || top != -1) { while (p != NULL) { VISIT(p); STACK[++top] = p; p = p-lchild; } p = STACK[top--]; p = p-rchild; } } 二叉树的中序遍历(非递归算法 )算法思想:若 p 所指结点不为空,则将该结点的地址p 入栈,然后再将 p 指向其左孩子结点;若p 所 指向的结点为空,则从堆栈中退出栈顶元素(某个结点的地址)送p,并访问该结点,然后再将 p 指 向该结点的右孩子结点。重复上述过程,直到 p = NULL 且堆栈为空,遍历结束。 #define MAX_STACK 50 void InOrderTraverse(BTree

文档评论(0)

始终如一 + 关注
官方认证
内容提供者

始终如一输出优质文档!

认证主体苏州市致远互联网科技有限公司
IP属地江苏
统一社会信用代码/组织机构代码
91320582MA27GAWJ0R

1亿VIP精品文档

相关文档