数据结构
文章平均质量分 51
楠c
这个作者很懒,什么都没留下…
展开
-
设计一个循环队列(c++)
目录接口及要求开始错误的逻辑修改思路代码接口及要求题目链接开始错误的逻辑看到队列,首先我就想到了用链表来实现,但是这道题实际上用数组实现比较好一点,题目中提到循环,说明他是定长的一个队列,且要重复利用队列之前的空间存储新值。rear++,始终要指向当前元素的下一个用于插入数据与前面对比,当队列数据满了front 和rear也是相等的,那么到底是队列为空front与rear相等,还是队列满元素两者相等?这只是两个例子,还有很多的测试用例可以证明,因为无法区分两种情况,说明这样的循环队列结构已原创 2021-02-21 22:33:06 · 366 阅读 · 0 评论 -
两个栈实现一个队列,两个队列实现一个栈
目录1. 两个栈实现一个队列完整代码2. 用栈实现队列完整代码3. 队列实现栈完整代码4. STL中栈的接口5. STL中队列的接口1. 两个栈实现一个队列这两道题并没有考察太多的算法,就是单纯对队列和栈特性的应用。细节还是挺多需要注意的。题目链接一个栈是无法完成队列操作的,我们要时刻记住队列的性质,先入先出。入队列,我们可以按入栈进行操作,那么出队列呢,由于出队列是出队头的数据,我们不可能动栈底的数据,所以自然不能用一个栈。所以我们用两个栈,一个栈用来入队列,一个栈用于出队列 //第一原创 2021-02-19 22:50:58 · 682 阅读 · 0 评论 -
经典链表面试题:对链表进行插入排序
简单介绍一下插入排序算法:题目链接点这两个例子:解题思路:利用插入排序这种思想给链表排序首先给出一个测试用例接着重新定义一个链表,把头节点拿下来,作为新的排序链表准备进行插入cur与sortHead的值进行比较,当cur为NULL,作为结束条件。按我们以往的经验,肯定不能直接与sortHead进行比较,而是重新定义一个变量。第一次比较:(默认升序)很明显是个头插。第二次比较:现在cur走到4,与下面的排序链表值进行比较,比sortHead大,所以我们需要比较他的下一个,所以需要原创 2021-01-31 19:26:08 · 297 阅读 · 1 评论 -
经典链表面试题:删除链表中重复的节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5举个例子解题思路:删除掉重复节点,这个和去重有些不一样,去重是保留一个,这里是要有重复的完全删除掉。第一感觉就使用双指针,因为肯定要进行前后比较。两个节点对应的值不相同就往后走,相同就让后面指针自己走,直到不相同。然后删除掉之前的节点。图解实现:定义两个指针cur和ne原创 2021-01-30 21:29:50 · 1013 阅读 · 2 评论 -
数组实现堆(完全二叉树)的实现(向下调整算法以及TopK问题)
堆是用完全二叉树来实现,而它的节点是一层一层连在一起,所以我们可以用数组来实现他,将完全二叉树的节点按照堆的性质通过算法组合就实现了堆堆的实现堆的结构体以及函数声明堆的初始化向下调整算法向上调整算法堆排序TopK问题详细代码堆的结构体以及函数声明#pragma once#include<stdio.h>#include<windows.h>#include<stdlib.h>#include<assert.h>//实现一个大堆typedef原创 2021-01-21 15:54:03 · 340 阅读 · 1 评论 -
数据结构-—双向带头循环链表的增删查改(c语言)
目录链表的结构体以及函数声明链表初始化创建节点查找节点插入节点删除节点链表的结构体以及函数声明typedef int LTDataType;typedef struct ListNode { LTDataType data; struct ListNode* prev; struct ListNode* next;}ListNode;//初始化//void ListInit();ListNode* ListInit(ListNode* pHead);// 创建返回链表的头结点.L原创 2021-01-20 09:57:16 · 262 阅读 · 0 评论 -
LeetCode:证明环型链表与找出入环的第一个节点
bool hasCycle(struct ListNode *head) { struct ListNode *fast=head; struct ListNode *slow=head; while(fast&&fast->next) { slow=slow->next; fast=fast->next->next; //快慢指针相遇了说明有环 if(slow==fast) .原创 2021-01-10 20:23:32 · 233 阅读 · 1 评论 -
剑指offer: 链表中倒数第K个节点
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListHead,unsigned int k) { ListNode* slow=pListHead; ListNode* fast=pListHead.原创 2021-01-10 18:35:31 · 115 阅读 · 0 评论 -
LeetCode:合并两个有序链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedef struct ListNode ListNode;struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ ListNode* dummy=(List.原创 2021-01-10 18:32:20 · 133 阅读 · 0 评论 -
2016年校招真题:链表的回文结构
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class PalindromeList {public: bool chkPalindrome(ListNode* A) { //假如传入空 if(A==NULL) { return false; .原创 2021-01-10 15:52:49 · 130 阅读 · 0 评论