《考研数据结构算法经典.doc

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

数据结构算法背诵 一、线性表 1.逆转顺序表中的所有元素 算法思想:第一个元素和最后一个元素对调,第二个元素和倒数第二个元素对调,……,依此类推。 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; } } 2.删除线性链表中数据域为 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); } } 3.逆转线性链表 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; } 4.复制线性链表(递归) 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; } } 5.将两个按值有序排列的非空线性链表合并为一个按值有序的线性链表 LinkList MergeList(LinkList lista, LinkList listb) { LinkList listc, p = lista, q = listb, r; // listc 指向 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; } 二、树 1.二叉树的先序遍历(非递归算法) 算法思想:若 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; } } 2.二叉树的中序遍历(非递归算法) 算法思想:若 p所指结点不为空,则

文档评论(0)

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

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

1亿VIP精品文档

相关文档