
数据结构与算法
WJ8871
这个作者很懒,什么都没留下…
展开
-
OJ-字符串中的第一个唯一字符、字符串最后一个单词的长度,验证回文串、字符串相加
class Solution {public:int firstUniqChar(string s) { // 统计每个字符出现的次数 int count[256] = {0}; int size = s.size(); for(int i = 0; i < size; ++i) count[s[i...原创 2022-05-18 12:38:52 · 179 阅读 · 0 评论 -
strcpy、strncpy、strcat、strncat、strcmp、memcpy、ststr模拟实现
【代码】strcpy、strncpy、strcat、strncat、strcmp、memcpy模拟实现。原创 2023-09-27 21:53:02 · 83 阅读 · 0 评论 -
二叉树创建、前序遍历、中序遍历、后序遍历、层序遍历
【代码】二叉树创建、前序遍历、中序遍历、后序遍历、层序遍历。原创 2023-09-24 19:40:10 · 113 阅读 · 0 评论 -
直接插入排序、希尔排序、简单选择排序、堆排序、冒泡、快速排序代码实现
一、插入类排序:1.直接插入排序#include<stdio.h>void print(int a[], int n){ for (int i = 0; i < n; i++) { printf("%d ", a[i]); } printf("\n");}void insertSort(int a[], int n){ int i, j; for ( i = 1; i < n; i++) { int key = a[i]; /原创 2022-04-26 09:07:55 · 3784 阅读 · 0 评论 -
OJ-相同的树、对称二叉树、二叉树前序、中序、后序遍历、另一颗树的子树、平衡二叉树、二叉树的构建和遍历
一、相同的树:bool isSameTree(struct TreeNode* p, struct TreeNode* q){ if(p==NULL&&q==NULL) { return true; } if(p==NULL||q==NULL) { return false; } return p->val==q->val && isSameTree(p->le原创 2022-04-18 19:59:50 · 398 阅读 · 0 评论 -
OJ-单值二叉树
代码如下://检测每个节点的值是否为val,也就是和根节点的值是否相同bool _isUnivalTree(struct TreeNode* root,int val){ if(root==NULL) { return true; } if(root->val!=val) { return false; } return _isUnivalTree(root->left,val)&am...原创 2022-04-17 20:41:37 · 179 阅读 · 0 评论 -
堆的概念,建堆、向下调整、向上调整、插入、删除、容量检查等操作
堆相关概念:是一颗完全二叉树。 对任意结点满足若所有结点小于它的孩子(若有孩子的话),成为小根堆,若所有结点大于它的孩子,成为大根堆(若有孩子的话)。 堆顶元素一定是最大的或最小的。 每条路径一定是升序或者降序。相关操作:typedef int DataType;typedef int (*PFUNC)(DataType left, DataType right);typedef struct Heap{ DataType* array; int capacity; i原创 2022-03-26 10:06:54 · 1222 阅读 · 0 评论 -
用队列实现栈--用两个队列模拟实现栈
出栈:哪个队列不为空,将该队列中前n-1个元素挪到另一个空队列中,然后将该队列中仅剩的元素出队列。入栈:哪个队列不为空,将元素放到哪个队列中即可。获取栈顶元素:哪个队列不为空,该队列的队尾就是栈顶元素。typedef int QDataType;typedef struct QNode{ struct QNode* next; QDataType data;}QNode;typedef struct Queue{ QNode* front; // 队头 QNod...原创 2022-03-17 01:24:14 · 504 阅读 · 0 评论 -
用栈实现队列---用两个栈模拟实现一个队列
入队列:直接将元素放进s1(s1栈顶为模拟队列的队尾);出队列:如果s2非空,直接让s2出栈(s2栈顶为模拟队列的队头); 如果s2为空,将s1中所有元素导入s2中,然后让s2出栈。获取队头元素:找s2;判空:s1&&s2都是空;typedef int DataType;typedef struct stack{ DataType* array; int capacity; int top;}stack;//...原创 2022-03-16 16:38:18 · 747 阅读 · 0 评论 -
循环队列的实现(初始化、入队操作、出队操作、判满、判空、获取队头、队尾元素、销毁操作)
typedef struct { int* array; int front; int rear; int count; //用count++的方式判断循环队列是否满 int N; //总个数} MyCircularQueue;//初始化MyCircularQueue* myCircularQueueCreate(int k) { MyCircularQueue* myQueue=(MyCircularQueue*)malloc(sizeof(MyCircu...原创 2022-03-15 17:54:27 · 3639 阅读 · 0 评论 -
复制带随机指针域的链表
思路:总共分为三个步骤:①在原链表每个结点后插入一个值相等的新节点;②给新结点随机指针域赋值;③将新结点拆下来;(最后所用的是新链表)/** * Definition for a Node. * struct Node { * int val; * struct Node *next; * struct Node *random; * }; */struct Node* copyRandomList(struct Node* head) ...原创 2022-03-14 15:51:58 · 582 阅读 · 0 评论 -
双链表初始化、头插、尾插、头删、尾删、任意位置插入和删除、判空、销毁、打印、查找操作
ListNode* buyDListNode(LTDataType data){ ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); if (NULL == newNode) { assert(0); return NULL; } newNode->data = data; newNode->prev = NULL; newNode->next = NULL; return newNode;}.原创 2022-03-14 10:53:49 · 1057 阅读 · 0 评论 -
OJ题 有效的括号--用栈检验括号是否匹配
题目描述:思路:遍历字符串所有元素,若为左括号,则入栈,如果为右括号,则直接获取栈顶元素,看是否匹配。typedef char DataType;typedef struct stack{ DataType *array; int capacity; int top; }stack;//栈的初始化void stackInit(struct stack *ps,int capacity){ assert(ps); ps->array=(.原创 2022-03-13 21:16:37 · 483 阅读 · 0 评论 -
OJ-合并两个有序链表
题目描述:代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){ struct ListNode* p=list1; ..原创 2022-03-12 00:12:31 · 2135 阅读 · 0 评论 -
OJ题-链表分割
题目:解题思路:创建两个链表,分别存放小于x的节点和大于等于x的节点,分别进行尾插代码如下:class Partition {public: ListNode* partition(ListNode* pHead, int x) { if(pHead == NULL) return NULL; struct ListNode* lessHead, *lessTail,*greaterHead, *gr...原创 2022-03-10 23:59:23 · 989 阅读 · 0 评论 -
①判断两个无环链表是否相交 ②环形链表,求环的入口点
题目:代码如下:bool hasCycle(struct ListNode *head) { struct ListNode *fast=head; struct ListNode *slow=head; while(fast&&fast->next) { fast=fast->next->next; slow=slow->next; if(fast==slow)..原创 2022-03-10 23:30:46 · 379 阅读 · 0 评论 -
OJ-移除链表元素
当前结点若为要删除的,要判断它是不是第一个结点,删除第一个和中间结点是不同的方式。注意删除中间结点时,释放了p之后,让p指向下一个结点,注意此时是p=pre->next;而不是p=p->next;/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* removeE...原创 2022-02-28 00:08:35 · 273 阅读 · 0 评论 -
OJ-链表的中间结点
用快慢指针法,fast一次走两步,slow一次走一步,当fast指向空或者fast的下一个为空时,此时的slow指向所求元素,直接返回即可。struct ListNode* middleNode(struct ListNode* head){ struct ListNode* slow=head; struct ListNode* fast=head; while(fast&&fast->next) { fast=fa...原创 2022-02-27 23:18:52 · 275 阅读 · 0 评论 -
单链表及其初始化、头插、头删、尾插、尾删、查找等操作
链表概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表分类:带头结点 vs 不带头结点 单向 vs 双向 循环 vs 非循环// 1、无头+单向+非循环链表增删查改实现typedef int DateType;typedef struct SListNode{ DateType data; struct SListNode* next;}Node;1.单链表初始化// 从堆上申请一个节点并初始化原创 2022-02-25 23:07:15 · 361 阅读 · 0 评论 -
顺序表及其初始化、头插、头删、尾插、尾删、在指定位置插入和删除元素、查找、扩容等操作
首先记录一下线性表的概念:线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串。线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:1. 静态顺原创 2022-02-24 22:27:38 · 1302 阅读 · 0 评论 -
BST树(二叉排序树或二叉搜索树)的插入操作
构造一颗二叉排序树如下:代码如下:#include <stack>#include <queue>using namespace std;template<typename T, typename Comp = less<T>>class BSTree{public: BSTree() :root_(nullptr) {} ~BSTree() {} //非递归插入操作 void n_insert(const T&am..原创 2021-10-27 10:13:56 · 496 阅读 · 0 评论