
数据结构
风萧萧兮易水寒丶
985软件工程本科在读
展开
-
二叉树的基本操作(遍历、删除、插入、求最大高度、求最大宽度等)
二叉树的定义:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; void visit(TreeNode* root)//对节点进行操作的函数,可自定义 {}...原创 2019-11-20 16:53:06 · 577 阅读 · 0 评论 -
数据结构 快速排序
看完算法导论按照自己的思路写的void exchange(int& a, int& b){ int temp = a; a = b; b = temp;}void qsort(int arr[], int p, int q){ if (p >= q) return; int i = p-1, j = p, A = arr[q]; while (j &l...原创 2019-10-28 18:53:12 · 90 阅读 · 0 评论 -
数据结构 递归排序
void merge(int arr[], int p, int q, int r){ int *a1 = (int*)malloc(sizeof(int)*(q - p + 2)), *a2 = (int*)malloc(sizeof(int)*(r - q+1)); for (int i = 0; i < q - p + 1; i++) ...原创 2019-10-27 20:59:47 · 234 阅读 · 0 评论 -
数据结构 Sunday算法
int Sunday(const char*p1, const char* p2){ int len1 = strlen(p1), len2 = strlen(p2); int i = len2-1, j = len2 - 1; while (i<len1&&j>=0) { if (p1[i] == p2[j]) { i--; j--; ...原创 2019-08-09 14:01:18 · 152 阅读 · 0 评论 -
数据结构 KMP算法详细讲解
https://www.cnblogs.com/ZuoAndFutureGirl/p/9028287.html原创 2019-08-09 12:46:54 · 388 阅读 · 0 评论 -
数据结构 查找链表的倒数第K个节点,要求只能遍历一次链表
思路:这个题的思路和上一个题的思路差不多,也是快慢指针的问题,让快指针先走k步,再让快指针和慢指针一起走,当快指针指向NULL时,慢指针刚好指向倒数第k个节点。List SearchKNode(List Head,int k){ List Node1 = Head, Node2 = Head; while (--k) { Node1 ...原创 2019-08-06 10:39:21 · 268 阅读 · 0 评论 -
数据结构 查找单链表的中间节点,要求只能遍历一次链表
思路:这个题需要使用快慢指针,快指针一次走两步,慢指针一次走一步,那么当快指针遍历完整个链表之后,慢指针刚好指向链表的中间位置,返回这个节点就可以求得一个链表中间节点的位置List SearchMiddleNode(List Head){ List Node1=Head, Node2=Head; while (Node1&&Node1->Next)...原创 2019-08-06 10:29:58 · 492 阅读 · 0 评论 -
数据结构 单链表的逆转
一开始额外定义了三个指针,然后往后移动,写了十几行,把问题搞复杂了。这个问题其实几行代码就能解决,附上简单的方法:List Reverse(List L){ List p=NULL, q=NULL; while (L) { p = L; L = p->Next; p->Next = q; ...原创 2019-07-11 19:35:05 · 404 阅读 · 0 评论 -
数据结构 单链表实现约瑟夫环
单链表实现约瑟夫环:分析:首先我们应该了解什么事约瑟夫环:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 结果+1即为原问题的解。代码:{&nbs...原创 2019-08-05 21:48:17 · 654 阅读 · 0 评论 -
数据结构 在一个无头链表前插入一个数据(要求不能遍历链表)
思路:最直接的思路就是遍历链表找到该节点前一个节点,再进行插入操作,但是此处不能遍历链表。所以我们可以先在该节点后面插入一个节点,然后交换两个节点的数据,就等价于再该节点前面插入一个节点。代码:void Insert(List L, int x)//分别为插入节点位置和要插入节点的数据{ List NewNode = (List)malloc(sizeof(struct Node)); ...原创 2019-08-05 21:19:24 · 332 阅读 · 0 评论 -
数据结构 删除一个无头单链表的非尾结点(不能遍历链表)
思路: 这题最直接的思路是找到目标节点的前一个节点,让前一个节点指向需要删除节点的下一个节点,这种方法要遍历链表,但是这里规定不能遍历链表,所以这里用另一种方法——替换法。替换法:顾名思义,就是将需要删除节点的值用下一个节点的指代替,完成了节点的替换,就有了两个节点,此处不考虑地址问题,再进行操作 L->Next = Temp->Next,free(Temp),就完成了节点的删除。...原创 2019-08-05 21:09:04 · 238 阅读 · 0 评论 -
数据结构 从尾到头打印链表
方法一:遍历链表方法二:递归void RprintList(List Head){ if (Head == NULL) return; RprintList(Head->Next); printf("%d ", Head->Data);}原创 2019-08-05 20:39:10 · 169 阅读 · 0 评论