数据结构
数据结构
*Summer
这个作者很懒,什么都没留下…
展开
-
Leecode 1700-无法吃午餐的学生数量(队列)
题目代码若喜欢栈顶的甜点的学生存在,那么不管他们在队伍的哪个位置,必定会遍历到他。否则,一定无法继续拿掉栈顶甜点。要点:学生位置可变,三明治位置不可变。先统计学生中对两种三明治的需求人数,之后遍历三明治数组,如果栈顶的三明治还有对应的学生,那么该三明治一定会被拿走,否则之后所有的三明治都无法在被拿走,输出剩下的学生数目,即无法拿走午餐的学生数目。int countStudents(int* students, int studentsSize, int* sandwiches, int san原创 2021-08-27 23:34:07 · 634 阅读 · 0 评论 -
Leecode 237-删除链表中的结点
题目请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。例子输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.提示:1. 链表至少包含两个节点。2. 链表中所有节点的值都是唯一的。3. 给定的节点为非末尾节点并且一定是链表中的一个有效节点。4. 不要从你的函数中返回任何结果。代码/**原创 2021-08-25 22:25:00 · 197 阅读 · 0 评论 -
Leecode 203-移除链表元素
题目描述给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。代码原创 2021-08-24 22:57:49 · 204 阅读 · 0 评论 -
Leecode 160-相交链表
题目描述给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。提示:listA 中节点数目为 mlistB 中节点数目为 n0 <= m, n <= 3 * 1041 <= Node.val <= 1050 <= skipA <= m0 <= skipB <= n如果 listA 和 listB 没有交点,intersectVal 为 0如果 listA原创 2021-08-23 22:30:33 · 120 阅读 · 0 评论 -
Leecode 14-环形链表
题目给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?代码一:/** * Definition for原创 2021-08-23 21:06:44 · 75 阅读 · 0 评论 -
Leecode 83-删除排序链表中的重复元素
题目存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。提示:1. 链表中节点数目在范围 [0, 300] 内2. -100 <= Node.val <= 1003. 题目数据保证链表已经按升序排列代码一/** * Definition for singly-linked list. * struct ListNode { * int val; * struc原创 2021-08-22 23:53:26 · 92 阅读 · 0 评论 -
Leecode 21-合并两个有序链表
题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:1. 两个链表的节点数目范围是 [0, 50]2. -100 <= Node.val <= 1003. l1 和 l2 均按 非递减顺序 排列代码/** * Definition for singly-linked list. *原创 2021-08-22 23:22:25 · 104 阅读 · 0 评论 -
Leecode-2 两数相加(链表)
题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,9,0,0,0,1]提示:1. 每个链表中的节点数在范围 [1, 100] 内原创 2021-08-21 23:36:54 · 127 阅读 · 0 评论 -
借助队列实现树的层次遍历
头文件 btree.h#ifndef _BTREE_H_#define _BTREE_H_#include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedef char datatype_bt; //定义树的链式结构 typedef struct btreenode{ datatype_bt data; //结点数据域 struct btreenode *lchild,*rchild;//左右原创 2021-08-14 21:50:14 · 315 阅读 · 0 评论 -
树的链式存储及遍历
头文件 btree.h#ifndef _BTREE_H_#define _BTREE_H_#include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedef char datatype_bt;typedef struct btreenode{ datatype_bt data; //结点数据域 struct btreenode *lchild,*rchild;//左右孩子指针 }btree原创 2021-08-14 21:44:31 · 101 阅读 · 0 评论 -
链式栈C语言实现
头文件 linkStack.h#ifndef _LINKSTACK_H_#define _LINKSTACK_H_#include<stdio.h>#include<stdlib.h>typedef int datatype; typedef struct node{ datatype data; //数据域 struct node *next; //链接指针域 }listnode,*linklist;linklist linkstack_creat原创 2021-08-14 21:39:55 · 349 阅读 · 0 评论 -
顺序栈C语言实现
头文件 sqStack.h#ifndef _SQSTACK_H_#define _SQSTACK_H_#include<stdio.h>#include<stdlib.h>typedef int datatype;typedef struct{ datatype *data; //用指针指向栈的存储空间 int maxlen; //当前栈的最大元素个数 int top; //指示栈顶位置(数组下标)的变量 }sqstack; sqstack *原创 2021-08-14 21:36:06 · 440 阅读 · 0 评论 -
链式队列C语言实现
头文件 linkQueue.h#ifndef _LINKQUEUE_H_#define _LINKQUEUE_H_#include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedef int datatype; //定义数据类型为int//定义链式队列的结点类型typedef struct linkQueueNode{ datatype data; //数据域 struct linkQ原创 2021-08-14 21:31:49 · 314 阅读 · 0 评论 -
顺序队列C语言实现
头文件 seqqueue.h#ifndef _SEQQUEUE_H_#define _SEQQUEUE_H_#include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedef int datatype; //定义数据类型为int#define MAXSIZE 10typedef struct seqqueue{ datatype data[MAXSIZE]; int front,rear;原创 2021-08-14 21:21:05 · 352 阅读 · 0 评论 -
Joseph问题
题目描述:设编号分别为:1,2,…n 的 n 个人围坐一圈。约定序号为 k (1<= k <=n) 的人从 1 开始计数,数到 m 的那个人出列,他的下一位又从 1 开始计数,数到 m 的人又出列,依次类推,直到所有人出列为止。例子:假设 n=8, k=3, m=4:则出列序列为:(6,2,7,4,3,5,1,8)算法思路:用一个不带头结点的循环链表来处理此问题,先构成一个有 n 个结点单循环链表,然后从第 k 个结点起从 1 计数,记到 m 时对应结点从链表中删除,然后原创 2021-08-14 21:12:20 · 228 阅读 · 0 评论 -
双向循环链表的C语言实现
头文件 DList.h#ifndef _DLIST_H_#define _DLIST_H_#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *prior; //结点的前驱指针 struct node *next; //结点的后继指针 }dlistnode;dlistnode *dlist_create(); //双向循环链表的创建void dlist_原创 2021-08-14 19:47:10 · 204 阅读 · 0 评论 -
单链表基础功能C语言实现
头文件 LinkList.h#ifndef _LINKLIST_H_ //为了防止头文件的重复包含 #define _LINKLIST_H_#include<stdio.h> //这样在测试文件中可以不引入这两个头文件 #include<stdlib.h> typedef int datatype;typedef struct node{ datatype data; //结点的数据域 struct node *next; //结点的指针域,指向其下一原创 2021-08-14 19:00:10 · 143 阅读 · 0 评论 -
顺序表基础功能的C语言实现
头文件:sqlist.h//为了防止头文件重复包含,定义一个条件编译 #ifndef __SQLIST_H__#define __SQLIST_H__#define MAXSIZE 100typedef int data_t; //将int数据类型重命名一下 //定义顺序表,并将其重命名 typedef struct{ data_t data[MAXSIZE]; int last; //指向表尾 }sqlist_t;sqlist_t *create_sqlist(vo原创 2021-08-14 18:14:15 · 174 阅读 · 0 评论